2016-04-22 152 views
1

我正在使用SparkPost API,并且无法理解如何使用YYYY-MM-DDTHH创建日期:MM :PHP中的SS + -HH:MM。在PHP中创建此日期格式:YYYY-MM-DDTHH:MM:SS + -HH:MM

什么是+ -HH:MM,是时区?

我来自审查其他类似的堆栈交流主题最接近的是这样的:

if (!$send_now && self::$row->datetime) 
{ 
    // This data is available: [send_datetime] => 04/01/2016 01:30 
    // This data is available: [timezone] => MDT-UTC-7 
    $send_at = date('Y-m-dTH:i:s' , strtotime(self::$row->datetime)); 
} 
else 
{ 
    $send_at = 'now'; 
} 

另一个FYI就是我与WordPress的工作,将要定位的实例设置为的时区。

任何帮助表示赞赏。


那的工作
if (!$send_now && self::$row->datetime) { 
    $send_at = date('c' , strtotime(self::$row->datetime)); 
    if (isset(self::$email_settings['timezone'])) { 
     $date_parts = explode('+' , $send_at); 
     $timezone_parts = explode('UTC' , self::$email_settings['timezone']); 
     $send_at = $date_parts[0] .$timezone_parts[1].':00'; 
    } 
} else { 
     $send_at = 'now'; 
} 

回答

3

这是ISO 8601日期格式。见https://en.wikipedia.org/wiki/ISO_8601

+ -HH:MM是UTC的时区偏移量。

在PHP中,你可以使用“C”格式化日期为ISO 8601

$send_at = date('c', strtotime(self::$row->datetime)); 
+0

有没有窍门,正确地设置时区时,所有的我都像“MDT-UTC-7”(串我相信那是Mountain Time)和'CDT-UTC-5'for Central? 我可以解析字符串的最后部分,但PHP安装程序来解释这些速记字符串? – atwellpub

+1

您可以使用'timezone_name_from_abbr'来获取使用全部或部分字符串的时区,如'$ timezone = timezone_name_from_abbr('CDT-UTC-5')'。您可能需要解析出前三个字母,例如CDT。然后,您可以在创建日期时传递时区,例如'$ date = new DateTime('04/01/2016 01:30',new DateTimeZone($ timezone));'。然后使用'$ date-> format('c')'输出为ISO 8601。 – Michael

3

这 更新的代码是你正在寻找

$send_at = date('c' , strtotime(self::$row->datetime)); 

格式其称为从UTC位置ISO 8601 date

输出是2016-04-22T22:48:10+00:00

一个nd是+ -HH:MM是来自UTC的时区差异,或者是+-