Отметка времени UNIX, как вы понимаете из time () в PHP, является своеобразным чудовищем.
Мне потребовалось много времени, чтобы понять это, но в результате скачка отметки времени увеличивается во время скачкасекунда, и когда високосная секунда заканчивается, метка времени (но не UTC!) возвращается на одну секунду назад.
Это имеет некоторые важные последствия:
- Вы всегда можете точно преобразоватьиз UTC в метку времени UNIX
- Вы можете не всегда (для всех точек времени) конвертировать из метки времени в UTC
- Метка времени Unix не является смежной, т.е.назад.(Или, в качестве альтернативы, он остается тем же без увеличения в течение 2 секунд.)
- Если вы получите ошибку преобразования, конвертирующуюся из метки времени UNIX в UTC, ошибка будет не более чем на 2 секунды.(Это означает, что вы можете получить неправильный день.)
- В ретроспектива метка времени Unix будет выглядеть линейной.Это означает, что если вы храните данные временных рядов и вас не заботит неправильное представление одной или двух секунд в год, то вы можете считать хранимые данные с метками времени непрерывными.
Обходные пути
Что если метка времени Unix не отскочила назад и не осталась прежней в течение 2 секунд?Это именно то, что Google сделал для своих серверов.Их решение состояло в том, чтобы медленно искажать время, равное всего лишь миллисекундам, за время в течение длительного периода времени, чтобы сделать високосную секунду практически незаметной для приложений.(Что касается приложений и операционных систем на серверах Google, дополнительные секунды больше не вставляются IERS .)