diff --git wp-includes/functions.php wp-includes/functions.php
index abac7b5..009d510 100644
--- wp-includes/functions.php
+++ wp-includes/functions.php
@@ -16,29 +16,56 @@ require( ABSPATH . WPINC . '/option.php' );
  * If $translate is true then the given date and format string will
  * be passed to date_i18n() for translation.
  *
+ * if $gmt is true, ensure defalt_timezone is set to GMT/UTC so that the
+ * results will correctly reflect the UTC timezone.
+ *
  * @since 0.71
  *
  * @param string $format Format of the date to return.
  * @param string $date Date string to convert.
  * @param bool $translate Whether the return date should be translated. Default is true.
+ * @param bool $gmt Return a date with UTC timezone.
  * @return string|int Formatted date string, or Unix timestamp.
  */
-function mysql2date( $format, $date, $translate = true ) {
+function mysql2date( $format, $date, $translate = true, $gmt = false ) {
 	if ( empty( $date ) )
 		return false;
 
-	if ( 'G' == $format )
-		return strtotime( $date . ' +0000' );
+	//If GMT is requested, ensure the correct timezone is set.
+	if ( $gmt ) {
+		//Store the current timezone so it can be restored when we're finished.
+		$previous_tz = date_default_timezone_get();
+		date_default_timezone_set('UTC');
+	}
+
+	/**
+	 * Store the new date in a variable.
+	 * We can't simply return it because we may have to restore the default timezone.
+	 *
+	 * Brackets used for clarity.
+	 */
+	if ( 'G' == $format ) {
+		$new_date = strtotime( $date . ' +0000' );
+	} else {
+		$i = strtotime( $date );
+	}
+
+	if ( 'U' == $format ) {
+		$new_date = $i;
+	} else {
+		//Add the "G != $format" statement so $new_date doesn't change if G really is the requested format.
+		if ( ( 'G' != $format ) && ( $translate ) )
+			$new_date = date_i18n( $format, $i );
 
-	$i = strtotime( $date );
+		elseif ( 'G' != $format )
+			$new_date = date( $format, $i );
+	}
 
-	if ( 'U' == $format )
-		return $i;
+	//If needed, restore the original timezone.
+	if ( $gmt )
+		date_default_timezone_set($previous_tz);
 
-	if ( $translate )
-		return date_i18n( $format, $i );
-	else
-		return date( $format, $i );
+	return $new_date;
 }
 
 /**
diff --git wp-includes/general-template.php wp-includes/general-template.php
index faef3fa..29836ff 100644
--- wp-includes/general-template.php
+++ wp-includes/general-template.php
@@ -1498,15 +1498,15 @@ function get_the_time( $d = '', $post = null ) {
  * @return string
  */
 function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { // returns timestamp
-	$post = get_post($post);
+	$post = get_post( $post );
 
 	if ( $gmt )
 		$time = $post->post_date_gmt;
 	else
 		$time = $post->post_date;
 
-	$time = mysql2date($d, $time, $translate);
-	return apply_filters('get_post_time', $time, $d, $gmt);
+	$time = mysql2date( $d, $time, $translate, $gmt );
+	return apply_filters( 'get_post_time', $time, $d, $gmt );
 }
 
 /**
@@ -1548,15 +1548,15 @@ function get_the_modified_time($d = '') {
  * @return string Returns timestamp
  */
 function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translate = false ) {
-	$post = get_post($post);
+	$post = get_post( $post );
 
 	if ( $gmt )
 		$time = $post->post_modified_gmt;
 	else
 		$time = $post->post_modified;
-	$time = mysql2date($d, $time, $translate);
+	$time = mysql2date( $d, $time, $translate, $gmt );
 
-	return apply_filters('get_post_modified_time', $time, $d, $gmt);
+	return apply_filters( 'get_post_modified_time', $time, $d, $gmt );
 }
 
 /**
