Что такое временная метка Unix? В PHP при работе с датами функция strtotime()
выводит некоторое целочисленное значение - что это? Я попытался узнать об этом, но я не смог получить удовлетворительный ответ, особенно почему нам нужно преобразовывать даты с помощью strtotime()
.
Что такое временная метка Unix и зачем ее использовать?
Ответ 1
Что такое временная метка Unix
Проще говоря, отметка времени Unix - это способ отслеживать время как общее количество секунд. Этот счет начинается в эпоху Unix 1 января 1970 года в UTC. Поэтому Unix timestamp - это просто количество секунд между конкретной датой и Unix Epoch. Следует также отметить, что этот момент времени технически не меняется независимо от того, где вы находитесь на земном шаре. Это очень полезно для компьютерных систем для отслеживания и сортировки информации в динамических и распределенных приложениях как онлайн, так и на стороне клиента. Причина, по которой метки времени Unix используются многими веб-мастерами, заключается в том, что они могут одновременно отображать все часовые пояса. Для получения дополнительной информации прочитайте статью Wikipedia.
Что такое strtotime()
и как это полезно
Как следует из названия, функция strtotime()
используется для преобразования строки даты в временную метку Unix (str to time).
Из справочной документации PHP для strtotime()
:
strtotime. Разберитесь с каким-либо английским текстовым описанием даты и времени в отметке времени Unix.
Например, скажем, вы хотели получить временную метку Unix для даты 25 December 2013
, тогда вы бы использовали strtotime()
следующим образом:
echo strtotime("25 December 2013"), "\n"; // => 1387909800
strtotime()
также может обрабатывать относительные форматы времени и даты. Например, рассмотрим следующее:
echo strtotime("+1 month"), "\n"; // => 1390980039
echo strtotime("last day of next month"), "\n"; // => 1391152839
Вот некоторые основные примеры. strtotime()
может обрабатывать очень сложные форматы даты. Подробнее см. документацию.
Когда следует использовать метку времени
Временная метка Unix интерпретируется одинаково независимо от региона и рассчитывается из одного и того же момента времени независимо от часового пояса. Если у вас есть веб-приложение, которое используется в течение нескольких часовых поясов, и вам нужна дата/время, чтобы отразить настройки отдельных пользователей, используйте метку времени.
В случае strtotime()
он в основном используется для преобразования форматов даты. Поскольку strtotime()
может анализировать почти любую строку даты, он использовал для преобразования строки даты в метку времени. Если у вас есть отметка времени, вы можете отформатировать ее, как хотите, используя date()
или аналогичные функции.
Ограничения strtotime()
В 32-битной системе максимальное значение целого числа равно 2 147 483 647. Самое большое время, которое может быть представлено таким образом, - 03:14:07 UTC 19 января 2038 года. Это также известно как проблема 2038 года.
См. это примечание в руководстве PHP:
Допустимый диапазон отметки времени, как правило, от Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (Это даты, которые соответствуют минимальным и максимальным значениям для 32-разрядного целого числа со знаком.) Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому ваш диапазон дат может быть ограничен не раньше, чем эпоха Unix. Это означает, что, например, даты до 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах. Однако PHP 5.1.0 и более новые версии преодолевают это ограничение.
Использовать объекты DateTime
Если вы работаете с датами вне диапазона 13 Dec 1901
до 19 Jan 2038
, тогда рассмотрите возможность использования объектов < 2 > DateTime, которые могут работать с гораздо более широкими диапазон дат. DateTime может составлять примерно 293 миллиарда лет в любом направлении.
Класс DateTime доступен в версиях PHP >= 5.2.0. Если вы используете PHP-версию выше >= 5.2.0, вы должны использовать DateTime при работе с датами и временем. Это лучший способ пойти. Если у вас старая версия PHP, обновить уже. Все, что было до 5.3.0, является древним.
- Используйте
DateTime::__construct()
илиDateTime::createFromFormat()
, чтобы создатьDateTime
. Обратите внимание, чтоDateTime::createFromFormat()
доступен только на PHP >= 5.3. Используя этот метод, вы можете анализировать странные строки даты и времени, которые в противном случае могли бы быть невозможны с помощьюstrtotime()
- Используйте
DateTime::format()
метод для преобразования объектаDateTime
в любой формат даты, который вы, возможно, захотите использовать с
Вот несколько хороших статей о DateTime:
И книга для полки:
- php | архитектор Руководство по программированию даты и времени (написано Derick Rethans, который является автором к расширению даты ядра PHP)