MySQL TimeStamp в дату JavaScript неправильно преобразование
-
10-10-2019 - |
Вопрос
Итак, у меня есть метка времени в 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);