2016-04-20 2 views
3

PHP имеет time(), MySQL имеет UNIX_TIMESTAMP().Будет ли временная метка unix всегда одинаковой в php и MySQL?

Будут ли они всегда равными на данной машине?

Я ожидаю, что ответ, как правило, да, но есть ли какие-либо краевые случаи?

+0

@JayBlanchard DST не будет иметь никакого эффекта. – ceejayoz

+0

Ах, мой плохой @ceejayoz - просто был флэшбэк для настройки часового пояса в PHP, который не был в MySQL. –

+1

@JayBlanchard Ах, теперь это может повеселиться. : -p 'UNIX_TIMESTAMP (поле)', когда 'поле' является' DATETIME', может быть волосатым. Мы сохраняем дату/время 'TIMESTAMP' вместо' DATETIME' и используем http://carbon.nesbot.com/docs/ для манипуляций с PHP. – ceejayoz

ответ

2

Они будут всегда одинаковыми на одной машине.

Обратите внимание на то, что MySQL довольно распространен на второй машине, что открывает возможность для незначительных отличий (при нормальной работе, от таких вещей, как сетевая латентность, когда запрос возвращается на машину, выполняющую запрос) и, возможно, большие различия (если один или оба сервера имеют неправильное время локально).

+0

Даже если MySQL был на другой машине с другим часовым поясом, не должна ли временная метка UNIX предоставлять одинаковое значение с UTC 00:00:00? Я думаю, что единственное возможное различие во времени было бы при выполнении процесса. – Quantastical

+0

@Quantastical Да, он должен обеспечивать такое же значение. Каждый часовой пояс в мире имеет точно такую ​​же временную метку UNIX в любой конкретный момент. Тем не менее, «незначительные различия», о которых я говорю, - это примерно 1-2 секунды, если ваше соединение с сервером MySQL немного медленнее или что-то в этом роде. – ceejayoz

+1

@Quantastical, «серверы могут иметь неправильное время локально», особенно если они не корректируют время через ntp. В этом случае два разных сервера возвращают две разные метки времени в тот же момент. –

2

Да, они всегда будут представлять одно и то же время, плюс или минус любые различия во времени, которое требуется для выполнения друг друга.

Это потому, что, как time() и UNIX_TIMESTAMP() возвращают количество секунд с начала Unix Epoch, и Unix эпохи UTC, который является побочным дизайном агностического к time zones and daylight savings time.

Следует также отметить, что если вы работаете с определенной датой, которую вы конвертируете в временную метку unix, то временные зоны будут иметь значение.

+0

@Quantastical Вы неправильно читаете мой ответ. Я отмечаю, что на отдельных машинах вы видите различия из-за проскальзывания времени, а не с помощью NTP и т. Д. Временные интервалы не имеют к этому никакого отношения. – ceejayoz

Смежные вопросы