Intereting Posts

Что такое временная метка Unix и зачем ее использовать?

Что такое временная метка Unix? В PHP при работе с датами функция strtotime() выводит некоторое целочисленное значение – что это? Я пытался узнать об этом, но я не мог получить удовлетворительный ответ, особенно почему нам нужно преобразовывать даты с помощью strtotime() .

Что такое временная метка Unix

Проще говоря, отметка времени Unix – это способ отслеживать время как общее количество секунд. Этот счет начинается в эпоху Unix 1 января 1970 года в UTC. Поэтому временная метка Unix – это просто количество секунд между конкретной датой и эпохой Unix . Следует также отметить, что этот момент времени технически не меняется независимо от того, где вы находитесь на земном шаре. Это очень полезно для компьютерных систем для отслеживания и сортировки информации в динамических и распределенных приложениях как онлайн, так и на стороне клиента. Причина, по которой метки времени Unix используются многими веб-мастерами, заключается в том, что они могут одновременно отображать все часовые пояса. Для получения дополнительной информации прочитайте статью в Википедии .

Что такое 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 , тогда рассмотрите использование объектов DateTime PHP, которые могут работать с гораздо более широким диапазоном дат. DateTime может составлять примерно 293 миллиарда лет в любом направлении.

Класс DateTime доступен в версиях PHP> = 5.2.0. Если вы используете версию PHP выше> = 5.2.0, вы должны использовать DateTime при работе с датами и временем. Это лучший способ пойти. Если у вас старая версия PHP, обновите ее уже . Все, что было до 5.3.0, является древним.

  • Для создания объекта DateTime используйте либо DateTime::__construct() либо DateTime::createFromFormat() . Обратите внимание, что DateTime::createFromFormat() доступен только на PHP> = 5.3. Используя этот метод, вы можете анализировать strtotime() строки даты и времени, которые в противном случае могли бы быть невозможны с помощью strtotime()
  • Используйте метод DateTime::format() чтобы преобразовать объект DateTime в любой формат даты, с которым вы, возможно, захотите работать

Вот несколько хороших статей о DateTime:

  • Почему PHP DateTime rock
  • PHP Правильный путь: дата и время

И книга для полки:

  • php | Руководство по программированию даты и времени (написанное Дериком Ретансом , являющимся вкладчиком в расширение дат PHP)