Vraag Vergelijk twee datums met JavaScript


Kan iemand een manier voorstellen om de waarden van te vergelijken? twee data groter dan, kleiner dan, en niet in het verleden, met JavaScript? De waarden komen uit tekstvakken ...


1374
2018-01-29 19:14


oorsprong


antwoorden:


De Datum object zal doen wat je wilt - maak er een voor elke datum en vergelijk ze met de >, <, <= of >=.

De ==, !=, ===, en !== operatoren vereisen dat u gebruikt date.getTime() als in

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

om duidelijk te zijn, zal het gewoon niet controleren of gelijkheid direct met de data-objecten werkt

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)

Ik raad u aan drop-downs of een soortgelijke beperkte vorm van datuminvoer te gebruiken in plaats van tekstvakken, voor het geval dat u zich in de hel van invoervalidatie bevindt.


1563
2018-01-29 19:20



De gemakkelijkste manier om datums in javascript te vergelijken, is door deze eerst om te zetten naar een Date-object en deze datum-objecten vervolgens te vergelijken.

Hieronder vindt u een object met drie functies:

  • dates.compare (a, b)

    Retourneert een getal:

    • -1 als a <b
    • 0 als a = b
    • 1 als a> b
    • NaN als a of b een illegale datum is
  • dates.inRange (D, start, einde)

    Retourneert een Boolean of NaN:

    • waar als d is tussen de begin en einde (Inclusief)
    • vals als d is eerder begin of erna einde.
    • NaN als een of meer van de datums illegaal zijn.
  • dates.convert

    Gebruikt door de andere functies om hun invoer om te zetten naar een datumobject. De invoer kan zijn

    • een datum-object: de invoer wordt geretourneerd zoals ze is.
    • een rangschikking: Interpreteerd als [jaar, maand, dag]. NOTITIE maand is 0-11.
    • een aantal : Geïnterpreteerd als aantal milliseconden sinds 1 januari 1970 (een tijdstempel)
    • een draad : Verschillende indelingen worden ondersteund, zoals "JJJJ / MM / DD", "MM / DD / JJJJ", "31 januari 2009" enz.
    • een voorwerp: Geïnterpreteerd als een object met attributen voor jaar, maand en datum. NOTITIE maand is 0-11.

.

// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

374
2018-01-31 00:18



Vergelijken < en > net zoals gewoonlijk, maar alles waarbij = zou een a moeten gebruiken + voorvoegsel. Zoals zo:

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

Ik hoop dat dit helpt!


221
2018-05-23 12:21



De relationele operatoren <  <=  >  >= kan worden gebruikt om JavaScript-datums te vergelijken:

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

Echter, de gelijkheid operatoren ==  !=  ===  !== kan niet worden gebruikt om (de waarde van) datums te vergelijken omdat:

  • Twee verschillende objecten zijn nooit gelijk voor zowel strikte als abstracte vergelijkingen.
  • Een expressie die Objecten vergelijkt, is alleen waar als de operanden naar hetzelfde Object verwijzen.

U kunt de waarde van datums voor gelijkheid vergelijken met een van deze methoden:

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

Beide Date.getTime() en Date.valueOf() retourneer het aantal milliseconden sinds 1 januari 1970, 00:00 UTC. Beide Number functie en unary + operator belt de valueOf() methoden achter de schermen.


124
2018-01-31 16:04



Verreweg de eenvoudigste methode is om de ene datum van de andere af te trekken en het resultaat te vergelijken.

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

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

63
2017-11-01 00:48



Alleen dag vergelijken (component tijd negeren):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Gebruik:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}

30
2017-09-27 15:38



Het vergelijken data in JavaScript is vrij eenvoudig ... JavaScript heeft ingebouwd vergelijkingssysteem voor data waardoor het zo gemakkelijk is om de vergelijking te maken ...

Volg gewoon deze stappen om 2 datums te vergelijken, u heeft bijvoorbeeld 2 ingangen die elk een datumwaarde hebben String en jij om ze te vergelijken ...

1. je hebt 2 stringwaarden die je van een input krijgt en je wilt ze vergelijken, ze zijn als volgt:

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

2. Dat moeten ze zijn Date Object te vergelijken als datumwaarden, dus converteer ze eenvoudigweg naar datum met behulp van new Date(), Ik wijs ze gewoon opnieuw toe voor de eenvoud van uitleg, maar je kunt het hoe dan ook doen zoals jij:

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

3. Vergelijk ze nu eenvoudig met behulp van de >  <  >=  <=

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

compare dates in javascript


28
2017-07-11 09:59



welk formaat?

Als u een Javascript maakt Datum object, je kunt ze gewoon aftrekken om een ​​milliseconden verschil te krijgen (bewerken: of vergelijk ze gewoon):

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

25
2018-01-29 19:19



function datesEqual(a, b)
{
   return (!(a>b || b>a))
}

13
2017-07-20 03:36



je gebruikt deze code,

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

En controleer ook deze link http://www.w3schools.com/js/js_obj_date.asp


13
2017-08-09 10:49



KORT ANTWOORD

Hier is een functie die {boolean} retourneert als de waarde van dateTime> to dateTime Demo in actie

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

Uitleg

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 

omdat je nu zowel datetime in nummertype hebt je kunt ze vergelijken met vergelijkingsoperaties

(>, <, =,! =, ==,! ==,> = EN <=)

Dan

als u bekend bent met C# Aangepaste datum- en tijdnotatie Deze tekenreeks moet exact hetzelfde doen en u helpen bij het indelen van uw datum en tijd dtmFRM of u een datum- of unix-indeling invoert in de notatie datum of tijd

Gebruik

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

het enige dat u hoeft te doen is het doorgeven van elk van deze formaten die in de bibliotheek zijn gepacificeerd js het dossier


13
2017-08-02 21:06