Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 21247)
+++ wp-includes/post.php	(working copy)
@@ -2547,6 +2547,15 @@
 	if ( empty($post_date) || '0000-00-00 00:00:00' == $post_date )
 		$post_date = current_time('mysql');
 
+		// validate the date
+		$mm = substr( $post_date, 5, 2 );
+		$jj = substr( $post_date, 8, 2 );
+		$aa = substr( $post_date, 0, 4 );
+		$valid_date = apply_filters( 'wp_insert_post_validate_date', checkdate( $mm, $jj, $aa ), $post_date );
+		if ( !$valid_date ) {
+			return new WP_Error( 'invalid_date', __( 'Woops, the provided date is invalid.' ) );
+		}
+
 	if ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {
 		if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )
 			$post_date_gmt = get_gmt_from_date($post_date);
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 21247)
+++ wp-admin/includes/post.php	(working copy)
@@ -122,6 +122,10 @@
 		$hh = ($hh > 23 ) ? $hh -24 : $hh;
 		$mn = ($mn > 59 ) ? $mn -60 : $mn;
 		$ss = ($ss > 59 ) ? $ss -60 : $ss;
+		$valid_date = apply_filters( '_wp_translate_postdata_valid_date', checkdate( $mm, $jj, $aa ), $post_data );
+		if ( !$valid_date ) {
+			return new WP_Error( 'invalid_date', __( 'Woops, the provided date is invalid.' ) );
+		}
 		$post_data['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss );
 		$post_data['post_date_gmt'] = get_gmt_from_date( $post_data['post_date'] );
 	}
Index: wp-admin/js/post.dev.js
===================================================================
--- wp-admin/js/post.dev.js	(revision 21247)
+++ wp-admin/js/post.dev.js	(working copy)
@@ -528,6 +528,16 @@
 			return false;
 		});
 
+		$('#post').submit(function(e){
+			if ( !updateText() ) {
+				e.preventDefault();
+				$('#timestampdiv').show();
+				$('#publishing-action .ajax-loading').css('visibility', 'hidden');
+				$('#publish').prop('disabled', false).removeClass('button-primary-disabled');
+				return false;
+			}
+		});
+
 		$('#post-status-select').siblings('a.edit-post-status').click(function() {
 			if ($('#post-status-select').is(":hidden")) {
 				$('#post-status-select').slideDown('fast');
