将javascript日期字符串解析为时间戳。 tz信息在日期!

时间:2010-03-09 20:00:28

标签: php javascript datetime timestamp

我必须将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>';

3 个答案:

答案 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 */