MySQL Timestamp to JavaScript Date не конвертируется правильно - PullRequest
1 голос
/ 13 января 2011

, поэтому у меня есть отметка времени в mysql:

SELECT `tsdate`, UNIX_TIMESTAMP( `tsdate`) FROM t1
2010-11-07 21:50:05, 1289191805

Если я попытаюсь использовать следующее, отображается неправильное время / дата

var newDate = new Date();
newDate.setTime(1289191805000);
dateString = newDate.toUTCString();
alert(dateString);

Mon, 08 Nov 2010 04:50:05 GMT

Как мне заставить JavaScript отображать правильную дату?

В настоящее время я использую инструмент highcharts для построения графика, и он также показывает неправильную дату / время (написано на JavaScript). Я не хочу менять код старших карт, но я сделаю это при необходимости.

Спасибо, Джош

Ответы [ 3 ]

2 голосов
/ 13 января 2011

Похоже, у вас проблема с часовым поясом.Как вы видите, javascript - это GMT, а я подозреваю, что у вас время в западном США?

Попробуйте выполнить следующее в запросе MySQL:

SELECT UNIX_TIMESTAMP( CONVERT_TZ( tsdate, '-07:00', 'GMT') ) FROM t1

-07: 00 можно заменить любым идентификатором часового пояса, в котором вы находитесь.

Альтернативное решение может бытьсделать newDate.setTime(mysqlTimestamp + 7*3600000) в JavaScript, чтобы настроить его только там.

0 голосов
/ 13 января 2011

Я нашел решение на http://highslide.com/forum/viewtopic.php?f=9&t=8613

Highcharts.setOptions({
   global: {
      useUTC: false
   }
});

Я также хотел бы поблагодарить Энтони Гриста и Селдака за полезный код!

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);
0 голосов
/ 13 января 2011

Как упоминалось ранее, использование toString вернет его по местному времени, хотя у него также будет дополнительная информация о часовом поясе.Хак, чтобы отобразить его по местному времени без дополнительной информации о часовом поясе, это использовать getTimezoneOffset () (возвращает значение в минутах), умноженное на шестьдесят (чтобы получить его в секундах), умноженное на 1000 (чтобы получить его в миллисекундах)

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...