Изменение даты 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();