usare - uso array javascript




Confronta due date con JavaScript (20)

Qualcuno può suggerire un modo per confrontare i valori di due date maggiori di, minori di e non in passato usando JavaScript? I valori arriveranno dalle caselle di testo ...


Ciao Ecco il mio codice per confrontare le date. Nel mio caso sto facendo un controllo per non permettere di selezionare le date passate.

var myPickupDate = <pick up date> ;
var isPastPickupDateSelected = false;
var currentDate = new Date();

if(currentDate.getFullYear() <= myPickupDate.getFullYear()){
    if(currentDate.getMonth()+1 <= myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                        if(currentDate.getDate() <= myPickupDate.getDate() || currentDate.getMonth()+1 < myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                                            isPastPickupDateSelected = false;
                                            return;
                                        }
                    }
}
console.log("cannot select past pickup date");
isPastPickupDateSelected = true;

Confronta < e > come al solito, ma qualsiasi cosa che coinvolge = dovrebbe usare un prefisso + . Così:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y;  => true
+x >= +y;  => true
+x === +y; => true

Spero che questo ti aiuti!


Confrontare le date in JavaScript è abbastanza facile ... JavaScript ha un sistema di confronto integrato per le date che rende così facile fare il confronto ...

Segui semplicemente questi passaggi per confrontare il valore di 2 date, ad esempio hai 2 input che hanno ciascuno un valore Date in String e tu li confronti ...

1. hai 2 valori di stringa che ottieni da un input e desideri confrontarli, sono i seguenti:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Devono essere Date Object per essere confrontati come valori di data, quindi convertirli semplicemente in data, usando new Date() , li riassegno semplicemente per semplicità di spiegazione, ma puoi farlo in ogni caso:

date1 = new Date(date1);
date2 = new Date(date2);

3. Ora confrontali semplicemente, usando il > < >= <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true


Di gran lunga il metodo più semplice è quello di sottrarre una data dall'altra e confrontare il risultato.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);

Ecco cosa ho fatto in uno dei miei progetti,

function CompareDate(tform){
     var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
     var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));

     if(tform.START_DATE.value!=""){
         var estStartDate = tform.START_DATE.value;
         //format for Oracle
         tform.START_DATE.value = estStartDate + " 00:00:00";
     }

     if(tform.END_DATE.value!=""){
         var estEndDate = tform.END_DATE.value;
         //format for Oracle
         tform.END_DATE.value = estEndDate + " 00:00:00";
     }

     if(endDate <= startDate){
         alert("End date cannot be smaller than or equal to Start date, please review you selection.");
         tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
         tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
         return false;
     }
}

chiamando questo su modulo onsubmit. spero che questo ti aiuti.


Gli operatori relazionali <= > >= possono essere utilizzati per confrontare le date JavaScript:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

Tuttavia, gli operatori di uguaglianza == != === !== non possono essere usati per confrontare (il valore di) date because :

  • Due oggetti distinti non sono mai uguali per confronti stretti o astratti.
  • Un'espressione che confronta gli oggetti è vera solo se gli operandi fanno riferimento allo stesso oggetto.

Puoi confrontare il valore delle date per l'uguaglianza usando uno di questi metodi:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Sia Date.getTime() che Date.valueOf() restituiscono il numero di millisecondi dal 1 ° gennaio 1970 alle 00:00 UTC. Sia la funzione Number che quella unaria + chiamano i metodi valueOf() dietro le quinte.


Per aggiungere ancora un'altra possibilità alle molte opzioni esistenti, potresti provare:

if (date1.valueOf()==date2.valueOf()) .....

... che sembra funzionare per me. Certo, devi assicurarti che entrambe le date non siano indefinite ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

In questo modo possiamo garantire che venga effettuato un confronto positivo se entrambi sono indefiniti o ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

... se preferisci che non siano uguali.


Per confrontare due date, possiamo utilizzare la libreria JavaScript date.js che può essere trovata all'indirizzo: https://code.google.com/archive/p/datejs/downloads

e utilizzare il Date.compare( Date date1, Date date2 ) e restituisce un numero che indica il seguente risultato:

-1 = data1 è meno di data2.

0 = i valori sono uguali.

1 = data1 è maggiore di data2.


Prima di confrontare l'oggetto Dates , prova a impostare entrambi i loro millisecondi su zero come Date.setMilliseconds(0); .

In alcuni casi in cui l'oggetto Date viene creato dinamicamente in javascript, se continui a stampare Date.getTime() , vedrai la modifica dei millisecondi, che impedirà l'uguaglianza di entrambe le date.


Se il seguente è il formato della data, puoi utilizzare questo codice:

var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}

20121121 se il numero 20121121 è più grande del 20121103 o meno.


Supponiamo che tu abbia a che fare con questo 2014[:-/.]06[:-/.]06 o questo 06[:-/.]06[:-/.]2014 Formato di data 06[:-/.]06[:-/.]2014 , quindi puoi confrontare le date in questo modo

var a = '2014.06/07', b = '2014-06.07', c = '07-06/2014', d = '07/06.2014';

parseInt(a.replace(/[:\s\/\.-]/g, '')) == parseInt(b.replace(/[:\s\/\.-]/g, '')); // true
parseInt(c.replace(/[:\s\/\.-]/g, '')) == parseInt(d.replace(/[:\s\/\.-]/g, '')); // true
parseInt(a.replace(/[:\s\/\.-]/g, '')) < parseInt(b.replace(/[:\s\/\.-]/g, '')); // false
parseInt(c.replace(/[:\s\/\.-]/g, '')) > parseInt(d.replace(/[:\s\/\.-]/g, '')); // false

Come puoi vedere, separiamo i separatori e confrontiamo gli interi.


Supponiamo di avere gli oggetti data A e B, ottenere il loro valore temporale EPOC, quindi sottrarre per ottenere la differenza in millisecondi.

var diff = +A - +B;

È tutto.


quale formato?

Se costruisci un oggetto Date Javascript, puoi semplicemente sottrarlo per ottenere una differenza di millisecondi (modifica: o semplicemente confrontarli):

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true

usi questo codice,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

E controlla anche questo link http://www.w3schools.com/js/js_obj_date.asp


Nota - Confronta solo la parte data:

Quando confrontiamo due date in javascript. Ci vogliono anche ore, minuti e secondi. Quindi, se abbiamo solo bisogno di confrontare solo la data, questo è l'approccio:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

Ora: if date1.valueOf()> date2.valueOf() funzionerà come un incantesimo.


RISPOSTA BREVE

Ecco una funzione che restituisce {boolean} se from from dateTime> to dateTime Demo in action

var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
   return new Date(dtmfrom).getTime() >=  new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true

Spiegazione

jsFiddle

var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

dal momento che ora si dispone sia di tipo datetime in numero, è possibile confrontarli con qualsiasi operazione di confronto

(>, <, =,! =, ==,! ==,> = AND <=)

Poi

se hai familiarità con C# Custom Date and Time Format String questa libreria dovrebbe fare esattamente la stessa cosa e aiutarti a formattare data e ora dtmFRM sia che tu stia passando una stringa data o unix

uso

var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21

DEMO

tutto quello che devi fare è passare uno di questi formati pacificati nel file js della libreria


L' oggetto Date farà ciò che vuoi: costruisci uno per ogni data, quindi confrontalo usando > , < , <= o >= .

Gli operatori !== date.getTime() != , === e !== richiedono l'uso di date.getTime() come in

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

essere chiari solo il controllo dell'uguaglianza direttamente con gli oggetti dati non funzionerà

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Ti suggerisco di utilizzare i menu a discesa o alcune forme simili di immissione della data piuttosto che caselle di testo, tuttavia, per evitare di trovarti in un inferno di convalida dell'input.


        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }

Usa questo codice per confrontare la data usando javascript.

Grazie D.Jeeva


var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}

var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates






compare