MySQL TimeStamp в дату JavaScript неправильно преобразование

StackOverflow https://stackoverflow.com/questions/4681403

Вопрос

Итак, у меня есть метка времени в 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 для Grapth, и он также показывает неверную дату/время (он написан в JavaScript). Я не хочу менять код HighCharts, но при необходимости.

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

Это было полезно?

Решение 3

Я нашел решение в 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);

Другие советы

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

Попробуйте следующее в вашем запросе MySQL:

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

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

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

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

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top