Я хотел бы получить интервал времени между двумя датами в часовом поясе, который использует летнее время.php интервал и часовой пояс
Следующий снайпер показывает проблему.
$timezone = new DateTimeZone('UTC');
$from_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-10-31 23:59:59',$timezone);
$to_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-11-20 23:47:02',$timezone);
$interval = $from_date_obj->diff($to_date_obj, TRUE);
print_r($interval);
Для UTC часового пояса это показывает:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 19
[h] => 23
[i] => 47
[s] => 3
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 19
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
Теперь это один:
$timezone = new DateTimeZone('America/Los_Angeles');
$from_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-10-31 23:59:59',$timezone);
$to_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-11-20 23:47:02',$timezone);
$interval = $from_date_obj->diff($to_date_obj, TRUE);
print_r($interval);
показывает:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 20
[h] => -1
[i] => 47
[s] => 3
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 19
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
один в UTC показывает 19 дней/23 часа/47 минут и 3 секунды. Один для PT показывает 20 дней/-1 часов/47 минут и 3 секунды. Я думаю, что правильный ответ для PT должен составлять 20 дней/0 часов/47 минут и 3 секунды.
Есть ли способ сделать разницу в тихоокеанском часовом поясе, а не в конечном итоге с отрицательным часом? Является ли показание -1 часов желаемым результатом и что именно оно означает?
обновление: я узнал, что на самом деле PHP, кажется, не обрабатывать различий в отношении летнего времени, который обсуждается здесь:
PHP's DateTime::Diff gets it wrong?
Что касается результатов, которые я получал его похоже, является ошибкой PHP, как указано в приведенной выше ссылке.
hmmm ... версия 5.4.29 – macmiller
Я получил 20 дней 0 часов от калькулятора продолжительности. Я думаю, что разница между двумя днями не то же самое, потому что в PT часы меняются на один час. например. разница между 2014-11-01 23:59 и 2014-11-02 23:59 Я думаю, что 1 день, 1 час, потому что часы меняются 1 час. – macmiller
, но если они находятся в одном и том же часовом поясе, между ними нет 1 часа ... Возьмем, например, Нью-Йорк, один человек в Нью-Йорке имеет то же время, что и другой человек в Нью-Йорке, не так ли? поэтому, если они будут сравнивать времена между ними, они не потребуются для изменения часов. единственная проблема, которая может возникнуть между двумя датами, - это часть DST, и поэтому все ваши времена должны быть сохранены как UTC, а затем проще конвертировать даты – Gal