Изменение даты ISO в Javascript

Я создаю несколько дат ISO в программе Javascript с помощью следующей команды:

var isodate = new Date().toISOString()

который возвращает даты в формате "2014-05-15T16:55:56.730Z", Мне нужно вычесть 5 часов из каждой из этих дат. Приведенная выше дата будет затем отформатирована как "2014-05-15T11:55:56.730Z"

Я знаю, что это глупо, но я бы очень признателен за быстрое решение.

5 ответов

Решение

Одним из решений было бы изменить дату, прежде чем превратить ее в строку.

var date = new Date();
date.setHours(date.getHours() - 5);

// now you can get the string
var isodate = date.toISOString();

Для более полного и надежного управления датами я рекомендую проверить моменты.

Вы должны вычесть часы из строки?

Если нет, то:

var date= new Date();
date.setHours(isodate.getHours() - 5);
var isoDate = new Date().toISOString();

Если вам нужно использовать строку, я все равно буду испытывать желание сделать это:

var date= new Date("2014-05-15T16:55:56.730Z");
date.setHours(isodate.getHours() - 5);
var isoDate = new Date().toISOString();

Для сложных операций с датами и улучшенной совместимости с браузером я настоятельно рекомендую использовать moment.js, особенно если вы собираетесь делать несколько. Пример:

var fiveHoursAgo = moment().subtract( 5, 'hours' ).toISOString();

Модифицировать объекты Date можно с помощью таких функций, как Date.setHours, независимо от формата, который вы затем используете для отображения даты. Это должно работать:

var theDate = new Date();
theDate.setHours(theDate.getHours() - 5);
var isodate = theDate.toISOString();

Moment.js идеально подходит для этого. Ты можешь сделать:

var date = new Date();
var newDate = moment(date).subtract('hours', 5)._d //to get the date object
var isoDate = newDate.toISOString();
Другие вопросы по тегам