@@ -1588,7 +1588,8 @@ function _wp_iso_convert( $match ) {
15881588 *
15891589 * Requires and returns a date in the Y-m-d H:i:s format. Simply subtracts the
15901590 * value of the 'gmt_offset' option. Return format can be overridden using the
1591- * $format parameter.
1591+ * $format parameter. The DateTime and DateTimeZone classes are used to respect
1592+ * time zone differences in DST.
15921593 *
15931594 * @since 1.2.0
15941595 *
@@ -1600,13 +1601,19 @@ function _wp_iso_convert( $match ) {
16001601function get_gmt_from_date ($ string , $ format = 'Y-m-d H:i:s ' ) {
16011602 preg_match ('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})# ' , $ string , $ matches );
16021603 $ tz = get_option ('timezone_string ' );
1603- date_default_timezone_set ( $ tz );
1604- $ datetime = new DateTime ( $ string );
1605- $ datetime ->setTimezone ( new DateTimeZone ('UTC ' ) );
1606- $ offset = $ datetime ->getOffset ();
1607- $ datetime ->modify ( '+ ' . $ offset / 3600 . ' hours ' );
1608- $ string_gmt = gmdate ($ format , $ datetime ->format ('U ' ));
1609- date_default_timezone_set ('UTC ' );
1604+ if ( $ tz ) {
1605+ date_default_timezone_set ( $ tz );
1606+ $ datetime = new DateTime ( $ string );
1607+ $ datetime ->setTimezone ( new DateTimeZone ('UTC ' ) );
1608+ $ offset = $ datetime ->getOffset ();
1609+ $ datetime ->modify ( '+ ' . $ offset / 3600 . ' hours ' );
1610+ $ string_gmt = gmdate ($ format , $ datetime ->format ('U ' ));
1611+
1612+ date_default_timezone_set ('UTC ' );
1613+ } else {
1614+ $ string_time = gmmktime ($ matches [4 ], $ matches [5 ], $ matches [6 ], $ matches [2 ], $ matches [3 ], $ matches [1 ]);
1615+ $ string_gmt = gmdate ($ format , $ string_time - get_option ('gmt_offset ' ) * 3600 );
1616+ }
16101617 return $ string_gmt ;
16111618}
16121619
0 commit comments