Я делаю приложение, где пользователь может опубликовать статью. Если кто-то в Японии публикует статью 2017/03/25 09:00, должен ли я установить дату и время публикации статей в это время или установить время сервера?
Также, если кто-то в США заходит на сайт и собирается прочесть статью, в какую дату в статье должно быть сказано, что она была опубликована?
Если я скажу 2017/03/25 09:00, что время для пользователя в США еще не произошло, и это будет в будущем для него, в какое время я должен показать кого-то из другого конца света?
На мой взгляд, более последовательный способ справляться со временем — это использовать только Время UTC (очень похоже на GMT на практике, кроме того, функция php gmt * фактически использует время UTC) внутренне, например, дата / время, хранящиеся в постоянном хранилище (дБ и т. д.) и использование часового пояса пользователя для отображения времени для каждого пользователя.
Таким образом, вы сохраняете хронологию, упрощаете дизайн и мышление и всегда отображаете время, которое является значимым для пользователя, например, время в его / здесь часовом поясе.
В вашем примере не имеет значения, какое время отображать, так как вы будете отображать только релевантное время, например, время, когда оно действительно было создано в формате UTC, просто переведенное в часовой пояс каждого пользователя.
И не волнуйтесь, время всегда течет, никто не может увидеть, что не произошло, если временная привязка является последовательной. Неважно, видит ли кто-то другое время на своих часах, это все еще может быть тот же самый момент.
Если вам нужно иметь дело с гостями, вы можете сделать обоснованные предположения о правильном часовом поясе, используя геолокацию и / или настройки браузера. И вы все еще можете разрешить переключение часового пояса в ваших представлениях.
Это также способ упростить вашу модель, так как использование единой временной привязки упростит сравнение по времени для разных объектов и снизит риск неправильной настройки (одна единственная временная настройка везде).
углерод Легко использовать с Laravel, и это удобный способ работы с датой / временем.
Других решений пока нет …