Требуется решение для часового пояса Javascript (с учетом фактической разницы во времени UTC) - PullRequest
0 голосов
/ 29 мая 2010

У меня есть метки времени Unix из часового пояса X, который не известен,

текущая метка времени (now()) в TZ X известна 1275143019,

как подойти к функции javascript, чтобы она могла генерировать дату и время в текущем TZ пользователей в формате 2010-05-29 15:32:35?

UPDATE

Я не эксперт по меткам времени unix, если метка времени unix всегда одинакова в разных TZ,

тогда мне нужно немного изменить вопрос, чтобы текущая дата-время в TZ X была известна (например, 2010-05-29 22:32:28), а другая дата-время также в этом формате, как преобразовать их в пользовательский TZ на основе разница между now()?

UPDATE

Что-то странное из MySQL:

На сервере:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2010-05-29 18:34:30 | 
+---------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1275143674 | 
+------------------+
1 row in set (0.00 sec)

по местному:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2010-05-29 22:41:30 |
+---------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1275144091 |
+------------------+
1 row in set (0.00 sec)

Почему разница между now() (2010-05-29 22:41:30-2010-05-29 18:34:30=6hours) и UNIX_TIMESTAMP() (1275144091 - 1275143674 = 417seconds) не одинакова?

Ответы [ 2 ]

2 голосов
/ 29 мая 2010

Когда вы создаете экземпляр объекта Date, вы можете передать значение времени «миллисекунды с начала эпохи» в стиле Unix:

var date = new Date(milliseconds);

Это значение времени интерпретируется как UTC. Когда вы вызываете toString для этого объекта даты или используете получатели для часа / минуты / секунды, вы получаете значения в местном часовом поясе на клиенте.

Как отметил @vava в комментарии, текущее время в миллисекундах или секундах, которое вы получаете от Unix / Linux, равно всегда UTC, чтобы ваш сервер мог перетащить это значение на страницу и когда он выполняется на клиенте, произойдет правильная вещь.

edit & mdash; Если вам необходимо преобразовать локальное время на сервере в местное время на клиенте, вам действительно нужно получить время на сервере в формате UTC или хотя бы знать смещение UTC. Из значений год / месяц / день, час / минута / секунда можно установить дату Javascript с помощью функций «setUTCFoo» (где «Foo», если «FullYear», «Month», «Date», «Hour», «Minute») , "Секунды", "Миллисекунды").

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date

0 голосов
/ 29 мая 2010

Разница между выбором сейчас (); Команды из-за разницы часовых поясов. Выберите UNIX_TIMESTAMP (); должно быть всегда одинаковым на любых двух машинах.

Почему тогда 417 секунд отличаются? Это просто:

417 секунд ~ = 7 минут

22: 41: 30 - 18:34:30 = 7 минут

Синхронизируйте часы и метки времени Unix будут одинаковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...