You can use the built-in export tool to save posts in a date range. It’s wise to verify that an import plugin can successfully import the exported data before deleting the posts.
Don’t try to use SQL or phpMyAdmin to delete directly, unless you’re very good at SQL and understanding the taxonomy tables. You’re very likely to leave many loose ends otherwise. The safe approach is with custom PHP code. Query for all posts you want removed using WP_Query class’ “date_query” argument. Then loop through the results one by one, deleting each in turn.
If there are many many posts to delete, this is going to take some time, risking hitting PHP’s max execution time limit. You could increase this with something like @ini_set('max_execution_time', 120 );
added to wp-config.php. Don’t make it too long though, or you could introduce usability issues.
If there’s still too many posts for the time allotted, limit the posts returned with the “posts_per_page” argument of WP_Query. Then rerun the removal code multiple times until it can no longer find posts within the specified range.
You could instead use the back end posts list table to bulk delete the posts listed on one screen. The posts per screen can be increased up to 99 I believe. So you’d only be able to delete 99 posts at a time this way. This may or may not be quite tedious to do, but might still be faster than developing custom deletion code.