#javascript #momentjs
#javascript #momentjs
Вопрос:
У меня есть дата в формате UTC.
"2016-10-12 05:03:51"
Я создал функцию для преобразования даты UTC в мое местное время.
function FormatDate(date)
{
var arr = date.split(/[- :T]/), // from your example var date = "2012-11-14T06:57:36 0000";
date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], 00);
var newDate = new Date(date.getTime() date.getTimezoneOffset()*60*1000);
var offset = date.getTimezoneOffset() / 60;
var hours = date.getHours();
newDate.setHours(hours - offset);
return newDate;
}
Мой местный часовой пояс — GMT 0530.
Мой код выдал этот результат:
Tue Oct 11 2016 10:33:00 GMT 0530 (IST)
Я преобразовал дату с помощью онлайн-инструмента, чтобы получить правильные дату и время.
Wednesday, October 12, 2016 10:30 AM
Мой код соответствует онлайн-инструменту по времени, но не по дате.
Как я могу исправить вывод моего кода, предпочтительно используя moment.js
?
Ответ №1:
UTC — это стандарт, а не формат. Я предполагаю, что вы имеете в виду, что ваши строки используют нулевое смещение, т.Е. «2016-10-12 05:03:51» равно «2016-10-12 05:03:51 0000»
Вы на правильном пути при разборе строки, но вы можете использовать методы UTC, чтобы помешать хосту корректировать значения системного смещения при создании даты.
function parseDateUTC(s){
var arr = s.split(/D/);
return new Date(Date.UTC(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]));
}
console.log(parseDateUTC('2016-10-12 05:03:51').toLocaleString());
Если вы хотите использовать moment.js , вы можете сделать что-то вроде следующего. Это заставляет moment использовать UTC при разборе строки, а затем локально записывать ее в output:
var d = moment.utc('2016-10-12 05:03:51','YYYY-MM-DD HH:mm:ss');
console.log(d.local().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.0/moment.js"></script>
Ответ №2:
Поскольку вы отметили moment
, я предполагаю, что вы используете moment .
В таких случаях вы должны придерживаться своего подхода и не смешивать объект moment и date.
var dateStr = '2016-10-12 05:03:51';
var timeZone = " 0530";
var date = moment.utc(dateStr).utcOffset(dateStr timeZone)
console.log(date.toString())
Комментарии:
1. Возвращает ошибку для меня. Кроме того, вы всегда должны сообщать синтаксическому анализатору формат, который вы ему предоставляете, в противном случае вы полагаетесь на его правильное угадывание.