JS: ¿Verifica si la fecha es menos de 1 hora?

96

¿Hay alguna forma de comprobar si una fecha es inferior a 1 hora?

Algo como esto:

<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>

Además, una pregunta diferente: ¿hay alguna manera de agregar horas a una cita?

Me gusta esto:

<script>
var olddate = new Date("February 9, 2012, 12:15") + 15 HOURS; // output: February 10, 2012, 3:15
</script>
supercoolville
fuente
su segunda pregunta es un posible duplicado de stackoverflow.com/questions/1050720/…
Pbirkoff

Respuestas:

157

Definir

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

entonces puedes hacer

((new Date) - myDate) < ONE_HOUR

Para obtener una hora de una cita, intente

new Date(myDate.getTime() + ONE_HOUR)                       
Mike Samuel
fuente
¿No aceptará esto fechas anteriores a la hora también? (es decir, un diferencial negativo)
information_interchange
1
@information_interchange, sí. Si hace n horas es lo mismo que -n horas en el futuro, todas las fechas futuras son hace menos de una hora.
Mike Samuel
53

Usando alguna sintaxis de ES6:

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

    return date > anHourAgo;
}

Usando la biblioteca Moment :

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

Sintaxis taquigráfica con Moment :

const lessThanOneHourAgo = (date) => moment(date).isAfter(moment().subtract(1, 'hours'));
Gorka Hernandez
fuente
Esto también funciona con dayjs . const lessThanOneHourAgo = (date) => { return dayjs(date).isAfter(dayjs().subtract(1, 'hours')); };
turrican_34
Esto estaba bastante cerca de lo que necesitaba. que fue hace moreThanXHours, así que acabo de agregar isBefore en lugar de isAfter!
Urasquirrel
9

el momento en que la biblioteca realmente puede ayudar a expresar esto. El truco consiste en tomar la fecha, agregar la hora y ver si es antes o después de ahora:

  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!
  },
Michael Cole
fuente
2
//for adding hours to a date
Date.prototype.addHours= function(hrs){
    this.setHours(this.getHours()+hrs);
    return this;
}

Llamar a una función como esta:

//test alert(new Date().addHours(4));
Krishna N
fuente
2

Usar el momento será mucho más fácil en este caso, puede intentar esto:

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

Le dará un valor entero como 1,2,5,0etc para que pueda usar fácilmente la verificación de condiciones como:

if(hours < 1) {

Además, una cosa más es que puede obtener un resultado más preciso de la diferencia de tiempo (en decimales como 1.2,1.5,0.7etc) para obtener este tipo de resultado use esta sintaxis:

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

Avísame si tienes más consultas

Umang Loriya
fuente
0

Puedes hacerlo de la siguiente manera:

  1. Primero encuentre la diferencia de dos fechas, es decir, en milisegundos
  2. Convertir milisegundos en minutos
  3. Si los minutos son menos de 60, significa que la fecha está dentro de una hora, o no dentro de una hora.
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');
}
Tanzeem Bhatti
fuente
-2

// prueba esto: // para comparar dos fechas:

<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>

Espero que funcione 4 u ...

Krishna N
fuente