momentjs - examples - moment to timestamp
Momento JS: compruebe si una fecha es hoy o en el futuro (14)
Estoy tratando de usar momentjs
para verificar si una fecha dada es hoy o en el futuro.
Esto es lo que tengo hasta ahora:
<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">
var SpecialToDate = ''31/01/2014''; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
alert(''date is today or in future'');
} else {
alert(''date is in the past'');
}
</script>
El código está evaluando mi fecha (31 de enero de 2014) como una fecha en el pasado.
¿Alguna idea de lo que estoy haciendo mal?
Dado que nadie parece haberlo mencionado todavía, la forma más sencilla de verificar si un objeto de fecha Momento es anterior:
momentObj.isBefore()
O en el futuro:
momentObj.isAfter()
Solo deja los argumentos en blanco, eso será por defecto ahora.
También hay isSameOrAfter
e isSameOrBefore
.
NB esto factores a tiempo. Si solo te importa el día, mira la respuesta de Dipendu .
Después de leer la documentación: http://momentjs.com/docs/#/displaying/difference/ , debe considerar la función diff
como un operador menos.
// today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0
Por lo tanto, debe revertir su condición.
Si desea verificar que todo esté bien, puede agregar un parámetro adicional a la función:
moment().diff(SpecialTo, ''days'') // -8 (days)
Lo quería para otra cosa, pero finalmente encontré un truco que puedes probar
somedate.calendar(compareDate, { sameDay: ''[Today]''})==''Today''
var d = moment();
var today = moment();
console.log("Usign today''s date, is Date is Today? ",d.calendar(today, {
sameDay: ''[Today]''})==''Today'');
var someRondomDate = moment("2012/07/13","YYYY/MM/DD");
console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, {
sameDay: ''[Today]''})==''Today'');
var anotherRandomDate = moment("2012/07/13","YYYY/MM/DD");
console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, {
sameDay: ''[Today]''})==''Today'');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Puede usar la función de consulta isAfter()
de momentjs:
Verifica si hay un momento después de otro momento.
moment(''2010-10-20'').isAfter(''2010-10-19''); // true
Si desea limitar la granularidad a una unidad que no sea milisegundos, pase las unidades como el segundo parámetro.
moment(''2010-10-20'').isAfter(''2010-01-01'', ''year''); // false
moment(''2010-10-20'').isAfter(''2009-12-31'', ''year''); // true
Seleccione ayer para verificar días pasados o no con la ayuda de moment().subtract(1, "day");
Referencia: - http://momentjs.com/docs/#/manipulating/subtract/
function myFunction() {
var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
var SpecialToDate = document.getElementById("theDate").value;
if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
alert("date is today or in future");
console.log("date is today or in future");
} else {
alert("date is in the past");
console.log("date is in the past");
}
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">
Si queremos la diferencia sin el tiempo, puede obtener la fecha diferente (solo la fecha sin tiempo) como a continuación, usando el formato de momento.
Como, estaba enfrentando un problema con la diferencia mientras hacía;
moment().diff([YOUR DATE])
Entonces, surgió el siguiente;
const dateValidate = moment(moment().format(''YYYY-MM-DD'')).diff(moment([YOUR SELECTED DATE HERE]).format(''YYYY-MM-DD''))
IF dateValidate > 0
//it''s past day
else
//it''s current or future
Por favor, siéntete libre de comentar si hay algo para mejorar.
Gracias,
Si solo necesita saber cuál es más grande, también puede compararlos directamente:
var SpecialToDate = ''31/01/2014''; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment() > SpecialTo) {
alert(''date is today or in future'');
} else {
alert(''date is in the past'');
}
¡Espero que esto ayude!
Usa el más simple para verificar la fecha futura
if(moment().diff(yourDate) >= 0)
alert ("Past or current date");
else
alert("It is a future date");
invertir antes del método del momento para verificar si una fecha es la misma que hoy o en un futuro como este:
!moment(yourDate).isBefore(moment(), "day");
si firstDate es igual o después (futuro) secondDate devuelve true else else devuelve falso. Toda es firstDate = new Date ();
static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isSameOrBefore(date2,''day'');
}
return false;
}
Hay ejemplos de isSame, isBefore y isAfter for day compare moment;
static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if (date1 && date2) {
return date1.isSame(date2,''day'');
}
return false;
}
static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isAfter(date2,''day'');
}
return false;
}
static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isBefore(date2,''day'');
}
return false;
}
use isSame función
var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate)
{
}
Para verificar si es hoy :
Si comparamos dos fechas que contienen también la información de tiempo isSame
obviamente fallará. diff
fallará en caso de que las dos fechas se extiendan sobre el nuevo día:
var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds
Creo que la mejor manera, incluso si no es rápida y corta, es la siguiente:
var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()
Para verificar si es en el futuro :
Como también lo sugirieron otros usuarios, el método diff
funciona.
var isFuture = now.diff(anotherDate) < 0
// Returns true if is today or false if it''s not
moment(SpecialToDate).isSame(moment(), ''day'');
function isTodayOrFuture(date){
date = stripTime(date);
return date.diff(stripTime(moment.now())) >= 0;
}
function stripTime(date){
date = moment(date);
date.hours(0);
date.minutes(0);
date.seconds(0);
date.milliseconds(0);
return date;
}
Y luego solo úsala en esta línea:
isTodayOrFuture(YOUR_TEST_DATE_HERE)