Я разрабатываю чат-посланник веб-приложения. Для моей концепции я избегаю использовать часовой пояс.
Когда пользователь отправляет сообщение, я использую php для получения текущей даты / времени сервера и сохранения его в базе данных.
Чтобы отобразить время всех сообщений для пользователя, мне просто нужно узнать разницу между временем сервера и временем системы пользователя. Предположим, что разное – 3 часа, мне просто нужно использовать mysql для получения записанного времени сервера из базы данных, а затем добавить его с помощью 3, например: $ message-time-display = $ server-time-of-message-posted + $ different.
Для этого решения, хотя время компьютера пользователя может быть неправильным, оно не будет влиять на записи времени, сохраненные в моей базе данных. И он отобразит правильное время, когда пользователи скорректировали время своего компьютера. Является ли это решение надежным? Если да, то почему никто из людей этого не делает? Почему так много людей используют GMT или часовой пояс? Может, я пропустил какую-то важную проблему?
Одно быстрое решение – не показывать точное время, а не время. Пример: 2 минуты назад
А потом…
Поскольку вы знаете прошедшее время, вы можете вычесть это из текущего времени пользователя. Вы можете получить текущее время пользователя с помощью javascript.
var d = new Date(); var curr_hour = d.getHours(); var curr_min = d.getMinutes();
Если вы пишете приложение, которое будет только когда-либо на одном сервере, тогда нормально хранить время как время вашего локального сервера. Если ваше приложение будет развернуто во многих местах по всему миру, тогда имеет смысл хранить все время в формате UTC .
На мой взгляд, время, предоставленное пользователем, должно быть переведено из часового пояса пользователя в UTC (или часовой пояс вашего сервера, если это ваше личное приложение), перед тем, как быть сохраненным, и должно быть переведено обратно в часовой пояс пользователя при отображении.
Поэтому в вашем случае это должно выглядеть примерно так:
Если вы показываете временные метки, это должно выглядеть так:
Ваше решение должно работать до тех пор, пока пользователь установит правильное время. На самом деле это единственная проблема. Как вы думаете, почему никто не делает этого? Я думаю, что большинство из них делают, и только ленивые полагаются на GMT / EST раз.
Подсказка: я видел, что пользовательское время отправлено в коды отслеживания, такие как javascript Google Analytics, возможно, для вычисления разницы, которую вы принимаете;)