У меня есть поле в сетке, содержащее дату/время, и мне нужно знать разницу между этим и текущей датой/временем. Что может быть лучшим способом сделать это?
Даты хранятся как "2011-02-07 15:13:06"
.
У меня есть поле в сетке, содержащее дату/время, и мне нужно знать разницу между этим и текущей датой/временем. Что может быть лучшим способом сделать это?
Даты хранятся как "2011-02-07 15:13:06"
.
Это даст вам разницу между двумя датами в миллисекундах
var diff = Math.abs(date1 - date2);
В вашем примере это будет
var diff = Math.abs(new Date() - compareDate);
Вам нужно убедиться, что compareDate
является допустимым Date
объектом.
Что-то вроде этого, вероятно, сработает для вас
var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/')));
то есть. превращая "2011-02-07 15:13:06"
в new Date('2011/02/07 15:13:06')
, который является форматом конструктора Date
.
Вы можете просто вычесть два объекта даты.
var d1 = new Date(); //"now"
var d2 = new Date("2011/02/01") // some date
var diff = Math.abs(d1-d2); // difference in milliseconds
Если вы не вычитаете даты в одном и том же клиенте браузера и не заботитесь о случаях краев, таких как изменения дневного света, вам, вероятно, лучше использовать moment.js который предлагает мощные локализованные API. Например, это то, что у меня есть в моем utils.js:
subtractDates: function(date1, date2) {
return moment.subtract(date1, date2).milliseconds();
},
millisecondsSince: function(dateSince) {
return moment().subtract(dateSince).milliseconds();
},
Вы можете использовать метод getTime()
для преобразования Date
в число миллисекунд с 1 января 1970 года. Затем вы можете легко выполнить любые арифметические операции с датами. Конечно, вы можете преобразовать число обратно в Date
с помощью setTime()
. См. здесь пример.
Если вы хотите получить разницу в времени настенных часов, для локального часового пояса и с учетом экономии дневного света.
Date.prototype.diffDays = function (date: Date): number {
var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());
var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
return (utcThis - utcOther) / 86400000;
};
Тест
it('diffDays - Czech DST', function () {
// expect this to parse as local time
// with Czech calendar DST change happened 2012-03-25 02:00
var pre = new Date('2012/03/24 03:04:05');
var post = new Date('2012/03/27 03:04:05');
// regardless DST, you still wish to see 3 days
expect(pre.diffDays(post)).toEqual(-3);
});
Разница минут или секунд одинакова.