2011-02-09 3 views
115

У меня есть поле в сетке, содержащей дату/время, и мне нужно знать разницу между этим и текущей датой/временем. Что может быть лучшим способом сделать это?Как вычесть дату/время в javascript?

+2

Каков формат даты/времени? –

+0

он хранится так «2011-02-07 15:13:06» –

+2

Это не дубликат. У этого есть другое решение и объясняется намного лучше. Он также имеет лучший ранг поиска. – 3Dom

ответ

160

Это даст вам разницу между двумя датами в миллисекундах

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 конструктор может понять.

+1

это игнорирует обработку DTS для локального часового пояса (хорошо работает с UTC) –

+0

в TypeScript Я получаю ошибку tslint при попытке сделать это: var diff = Math.abs (new Date() - compareDate); – Devid

21

Вы можете просто вычесть два объекта даты.

var d1 = new Date(); //"now" 
var d2 = new Date("2011/02/01") // some date 
var diff = Math.abs(d1-d2); // difference in milliseconds 
6

Вы можете использовать getTime() метод для преобразования Date количеству миллисекунд, прошедших с 1 января 1970 года Тогда вы можете легко делать любые арифметические операции с датами. Конечно, вы можете преобразовать номер обратно в Date с setTime(). См. Пример here.

6

Если вы хотите получить разницу в времени настенных часов, для местного часового пояса и с учетом дневного света.


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); 
}); 

Diff минут или секунд в той же манере.

10

Если вы не вычитаете даты в одном и том же браузере и не заботитесь о случаях краев, таких как изменения дневного света, вам, вероятно, лучше использовать moment.js, который предлагает мощные локализованные API. Например, это то, что у меня есть в моем utils.js:

subtractDates: function(date1, date2) { 
    return moment.subtract(date1, date2).milliseconds(); 
}, 
millisecondsSince: function(dateSince) { 
    return moment().subtract(dateSince).milliseconds(); 
}, 
Смежные вопросы