我必须将javascript日期字符串解析为时间戳。如果日期字符串具有TZ信息,为什么我必须在DateTime构造函数中提供TZ对象,并再次使用setTimezone()?是否有更简单的方法来了解日期中的TZ信息?
$s = 'Thu Mar 11 2010 13:00:00 GMT-0500 (EST)';
$dt_obj = new DateTime($s, new DateTimeZone('America/New_York')); /* why? the TZ info is in the date string */
// again
$dt_obj->setTimezone(new DateTimeZone('UTC'));
echo 'timestamp ' , $dt_obj->getTimestamp(), '<br>';
答案 0 :(得分:3)
你真的必须把它放在那里吗?
你能不能用这个:
$s = 'Thu Mar 11 2010 13:00:00 GMT-0500 (EST)';
$dt_obj = new DateTime($s);
注意:DateTime::__construct
的第二个参数是optionnal:默认值为null
以后,你可以这样做:
var_dump($dt_obj->getTimestamp());
var_dump($dt_obj->getTimezone()->getName());
你会得到:
int 1268330400
string '-05:00' (length=6)
如果EST为Eastern Time Zone,我认为没关系,因为它是UTC-5
?
作为旁注:我在法国,UTC+1
;所以我的当地时区似乎没有任何影响力
答案 1 :(得分:0)
让您的生活更轻松只需使用strtotime():
$timestamp = strtotime('Thu Mar 11 2010 13:00:00 GMT-0500 (EST)');
答案 2 :(得分:0)
好的,这是交易。它知道日期字符串中的TZ。只需使用date_default_timezone_set()将默认时区设置为任何内容。无所谓 - 只需要设置。
//date_default_timezone_set('America/New_York');
date_default_timezone_set('UTC');
$s = 'Thu Mar 11 2010 13:00:00 GMT-0500 (EST)';
$dt_obj = new DateTime($s);
echo 'timestamp ' , $dt_obj->getTimestamp(), '<br>';
/* 1268330400 */
$s = 'Thu Mar 11 2010 13:00:00 GMT-0800 (PST)';
$dt_obj = new DateTime($s);
echo 'timestamp ' , $dt_obj->getTimestamp(), '<br>';
/* 1268341200 <- different, good */
比以下容易得多:
$s = 'Thu Mar 11 2010 13:00:00 GMT-0500 (EST)';
$dt_obj = new DateTime($s, new DateTimeZone('America/New_York'));
$dt_obj->setTimezone(new DateTimeZone('UTC'));
echo 'timestamp ' , $dt_obj->getTimestamp();
/* 1268330400 */