JS: Проверить, была ли дата меньше часа назад?

97

Есть ли способ проверить, была ли дата меньше часа назад?

Что-то вроде этого:

<script>
// old date
var olddate = new Date("February 9, 2012, 12:15");

// current date
var currentdate = new Date();

if (olddate >= currentdate - 1 hour) {
    alert("newer than 1 hour");
else {
    alert("older than 1 hour");
}
</script>

Также другой вопрос - есть ли способ добавить часы к дате?

Как это:

<script>
var olddate = new Date("February 9, 2012, 12:15") + 15 HOURS; // output: February 10, 2012, 3:15
</script>
Supercoolville
источник
ваш второй вопрос - возможный дубликат stackoverflow.com/questions/1050720/…
Pbirkoff

Ответы:

159

Определить

var ONE_HOUR = 60 * 60 * 1000; /* ms */

тогда ты можешь сделать

((new Date) - myDate) < ONE_HOUR

Чтобы получить один час до свидания, попробуйте

new Date(myDate.getTime() + ONE_HOUR)                       
Майк Сэмюэл
источник
Разве это не примет и даты, предшествующие часу? (т.е. отрицательный дифференциал)
information_interchange
1
@information_interchange, да. Если n часов назад совпадает с -n часами в будущем, то все будущие даты меньше часа назад.
Майк Сэмюэл
55

Используя некоторый синтаксис ES6:

const lessThanOneHourAgo = (date) => {
    const HOUR = 1000 * 60 * 60;
    const anHourAgo = Date.now() - HOUR;

    return date > anHourAgo;
}

Использование библиотеки Moment :

const lessThanOneHourAgo = (date) => {
    return moment(date).isAfter(moment().subtract(1, 'hours'));
}

Сокращенный синтаксис с Moment :

const lessThanOneHourAgo = (date) => moment(date).isAfter(moment().subtract(1, 'hours'));
Горка Эрнандес
источник
Это также работает с dayjs . const lessThanOneHourAgo = (date) => { return dayjs(date).isAfter(dayjs().subtract(1, 'hours')); };
turrican_34
Это было довольно близко к тому, что мне было нужно. который был больше чем X часов назад, поэтому я просто добавил isBefore вместо isAfter!
Urasquirrel
9

в настоящий момент библиотека действительно может помочь выразить это. Хитрость заключается в том, чтобы взять дату, добавить время и посмотреть, до или после этого:

  lastSeenAgoLabel: function() {
    var d = this.lastLogin();
    if (! moment(d).isValid()) return 'danger';  // danger if not a date.
    if (moment(d).add(10, 'minutes').isBefore(/*now*/)) return 'danger'; // danger if older than 10 mins
    if (moment(d).add(5,  'minutes').isBefore(/*now*/)) return 'warning'; // warning if older than 5mins
    return 'success';  // Looks good!
  },
Майкл Коул
источник
2
//for adding hours to a date
Date.prototype.addHours= function(hrs){
    this.setHours(this.getHours()+hrs);
    return this;
}

Вызовите такую ​​функцию:

//test alert(new Date().addHours(4));
Кришна Н
источник
2

В этом случае использовать момент будет намного проще. Вы можете попробовать следующее:

    let hours = moment().diff(moment(yourDateString), 'hours');

Он даст вам целочисленное значение, например 1,2,5,0 и т.д., поэтому вы можете легко использовать проверку условий, например:

if(hours < 1) {

Кроме того, еще одна вещь: вы можете получить более точный результат разницы во времени (в десятичных дробях, например, 1.2,1.5,0.7 и т. Д.), Чтобы получить такой результат, используя следующий синтаксис:

let hours = moment().diff(moment(yourDateString), 'hours', true);

Дайте мне знать, если у вас возникнут дополнительные вопросы

Уманг Лория
источник
0

Сделать это можно следующим образом:

  1. Сначала найдите разницу двух дат, т.е. в миллисекундах
  2. Преобразовать миллисекунды в минуты
  3. Если минуты меньше 60, это означает, что дата находится в пределах часа, иначе не в пределах часа.
var date = new Date("2020-07-12 11:30:10");
var now = new Date();
var diffInMS = now - date;
var msInHour = Math.floor(diffInMS/1000/60);
if (msInHour < 60) {
    console.log('Within hour');
} else {
    console.log('Not within the hour');
}
Танзим Бхатти
источник
-2

// попробуйте это: // сравнить две даты:

<Script Language=Javascript>
function CompareDates() 
{ 
    var str1 = document.getElementById("Fromdate").value;
    var str2 = document.getElementById("Todate").value;
    var dt1  = parseInt(str1.substring(0,2),10); 
    var mon1 = parseInt(str1.substring(3,5),10);
    var yr1  = parseInt(str1.substring(6,10),10); 
    var dt2  = parseInt(str2.substring(0,2),10); 
    var mon2 = parseInt(str2.substring(3,5),10); 
    var yr2  = parseInt(str2.substring(6,10),10); 
    var date1 = new Date(yr1, mon1, dt1); 
    var date2 = new Date(yr2, mon2, dt2); 

    if(date2 < date1)
    {
        alert("To date cannot be greater than from date");
        return false; 
    } 
    else 
    { 
        alert("Submitting ...");
    } 
} 

</Script>

Надеюсь, это сработает ...

Кришна Н
источник