I do
strtotime("2008-09-04")
Где 09 - месяц, а 04 - день, и я получаю результат:
1220500800
Это четверг, 04 сентября 2008 г., 04:00:00 по Гринвичу. Откуда эти 4 часа? Я должен получить 1220486400
вместо 1220500800
из strtotime.
I do
strtotime("2008-09-04")
Где 09 - месяц, а 04 - день, и я получаю результат:
1220500800
Это четверг, 04 сентября 2008 г., 04:00:00 по Гринвичу. Откуда эти 4 часа? Я должен получить 1220486400
вместо 1220500800
из strtotime.
Вы можете установить часовой пояс глобально с помощью функции date_default_timezone_set('UTC');
или просто установить часовой пояс локально при вызове функции strtotime()
, например:
echo strtotime("2008-09-04 +0000"); # 1220486400
Как сказали люди выше, вы, вероятно, страдаете от несоответствия часового пояса. Эта функция может быть полезна при отладке проблемы: http://us3.php.net/date_default_timezone_get.
Наиболее распространенные проблемы с strtotime в PHP связаны с часовыми поясами и форматами даты и времени. Я рассмотрю эти 2 пункта.
Итак, теперь у нас есть ясная картина. Чтобы преобразовать дату и время в unixtimestamp, выполните следующие действия:
// Saves your local set Timezone.
$saveDDTZ = date_default_timezone_get();
// Sets the timezone to UTC
date_default_timezone_set("UTC");
// Converts a date-time into a unix timestamp (= 1560470400).
$unixTS = strtotime( "2019-06-14 00:00:00 UTC");
// Restore the timezone
date_default_timezone_set($saveDDTZ");
Чтобы восстановить отметку времени unix до даты, используйте:
// Saves your local set Timezone.
$saveDDTZ = date_default_timezone_get();
// Sets the timezone to UTC
date_default_timezone_set("UTC");|
$unixTS = 1560470400
$dateTime = date("Y-m-d H:i:s", $unixTS);
// Restore the timezone
date_default_timezone_set($saveDDTZ");
Если вы хотите изменить дату UTC на часовой пояс, используйте разницу между UTC, часовым поясом и переходом на летнее время.