How do i remove approved spam comments by date?

Unfortunately, WordPress does not provide any functions to select comments by date range, as far as I know. And although you could wp_delete_comment in a loop, it would take unnecessarily long.

As the WordPress database entity relationship diagram shows, comments are limited to being in the wp_comments table and the wp_commentmeta table, which is convenient.

Use the MySQL command line client or phpMyAdmin to issue queries directly. If you:

SELECT * FROM `wp_comments` LIMIT 1

…you’ll see the structure of the comment data. comment_date and comment_date_gmt are the fields that you’ll play BETWEEN with. comment_date is the date of the comment offset by the timezone setting you set in Settings/General. comment_date_gmt is the UTC+0 time, the universal truth.

SELECT * FROM `wp_comments` WHERE `comment_date` BETWEEN '2010-01-15 00:00:00' AND '2012-01-15 00:00:00';

No need to explain. Once you’ve backed up your database (I really mean it, back it up, please, things can go wrong), you are free to:

DELETE FROM `wp_comments` WHERE `comment_date` BETWEEN '2010-01-15 00:00:00' AND '2012-01-15 00:00:00';

Now, as the database structure shows us we’ll be left with lingering metadata in the wp_commentmeta table.

SELECT * FROM `wp_commentmeta` WHERE `comment_ID` NOT IN (SELECT `comment_ID` FROM `wp_comments`);

A subquery will take care of these. Once you feel comfortable, substitute SELECT * for DELETE FROM.

To schedule such cleanups, like “delete all comments that older than a year”, you would couple these queries together with different flavours of wp_schedule_event and the wpdb class to issue queries. To construct the date you would use the date functions offered by WordPress.