Разбор строки даты в JavaScript для отметки времени. информация о ТЗ в дате! - PullRequest
2 голосов
/ 09 марта 2010

Я должен проанализировать строку даты JavaScript в метку времени. Если строка даты содержит информацию о TZ, почему я должен предоставить объект TZ в конструкторе DateTime и снова с setTimezone ()? Есть ли более простой способ сделать это, зная информацию о ТЗ в дате?

$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 ]

3 голосов
/ 09 марта 2010

Вы действительно должны положить его туда?

Можете ли вы просто не использовать это:

$s = 'Thu Mar 11 2010 13:00:00 GMT-0500 (EST)';
$dt_obj = new DateTime($s);

Примечание: второй параметр DateTime::__construct является необязательным: его значение по умолчанию null


А позже вы можете сделать:

var_dump($dt_obj->getTimestamp());
var_dump($dt_obj->getTimezone()->getName());

И вы получите:

int 1268330400
string '-05:00' (length=6)

Если EST Восточный часовой пояс , я полагаю, что все в порядке, так как UTC-5?


В качестве sidenote: я во Франции, которая находится на UTC+1; так что не похоже, что мой местный часовой пояс имеет какое-либо влияние

0 голосов
/ 09 марта 2010

Хорошо, вот сделка. Это известно о 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 */
0 голосов
/ 09 марта 2010

Сделайте вашу жизнь проще и просто используйте strtotime ():

$timestamp = strtotime('Thu Mar 11 2010 13:00:00 GMT-0500 (EST)');
...