2016-08-18 4 views
0

Ich habe andere gestellte Fragen durchgesehen, aber habe nicht das Problem mit meinem Code genau gefunden. Ich versuche, die neuere von 2 Termine zu finden, und ich habe die TT, MM YY, HH, MM, SS in Variablen aufgeteilt, so kann ich folgendes tun undVergleichen Datum Zeit Logik

var bool = false 
    if (year1 <= year2) 
     if (month1 <= month2) 
      if (day1 <= day2) 
       if (hours1 <= hours2) 
        if (minutes1 <= minutes2) 
         if (seconds1 <= seconds2) 
          bool = true; 
return bool; 

jedoch vergleichen, ich laufe immer noch in Problem, wenn zum Beispiel das erste Datum weniger in Tag Monat und Jahr und Stunde ist, aber größer in Minuten und Sekunden

Beispiel: wenn Zeit 1 ist 18/7/2016 15: 16: 4 und Zeit 2 ist 19/7/2016 18:14:59

es würde zu einem falschen Ergebnis führen, obwohl Zeit 2 neuer ist, es ist nur die Sekunden das ist ein Problem. kann dies durch else behoben werden?

+1

Warum nicht einfach: 'if (year1 <= year2 && month1 <= month2 && day1 < = Tag2 && Stunden1 <= Stunden2 && Minuten1 <= Minuten2 && Sekunden1 <= Sekunden2) { \t \t bool = true; \t} '? – vaso123

+0

Warum sollte man das Datum in Felder aufteilen, anstatt mit den nativen Vergleichsoperatoren auf "Date" -Objekten zu beginnen? – Aaron

+0

Mögliches Duplikat von [Zwei Daten mit JavaScript vergleichen] (http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript) – Aaron

Antwort

1

Für Ihre Frage: Ich versuche, die neuere von 2 Termine

I getTime() Funktion nutzen vorschlagen kann zu finden.

Kann die Zeit durch Ticks vergleichen.

Betrachten wir Sie haben date1 und date2. date1 ist 2015.06.10 15.20.30 und date2 ist 2016-06-10 16:30:50

date1.getTime() kleiner sein als date2.getTime()

date1 Human time (GMT): Wed, 10 Jun 2015 15:20:03 GMT Epoch timestamp: 1433949603 Timestamp in milliseconds: 1433949603000

date2 Human time (GMT): Fri, 10 Jun 2016 16:30:50 GMT Epoch timestamp: 1465576250 Timestamp in milliseconds: 1465576250000

example here

convertor here


Update: Bellow ist ein Beispiel der Funktion:

// returns true if date1 is newer than date2 and false viceversa 
function compareForNewer(date1, date2) { 
    return date1.getTime() > date2.getTime(); 
} 

Oder können Sie immer das aktuelle Datum zurück. Wie folgt:

// returns the newer date 
function getNewer(date1, date2) { 
    return date1.getTime() > date2.getTime() ? date1 : date2; 
} 

Ich hoffe, es wird Ihnen helfen. Genießen!

+0

klingt logisch, ich werde versuchen, danke – user3676224

+0

@ user3676224 Ich fügte Beispiele von Funktionen;) Viel Glück! – meorfi

+0

Es gibt keine Notwendigkeit für * getTime *, 'date1> date2' ist ausreichend, da der Operator'> 'die Argumente zu Number umwandelt und den internen Zeitwert des Datums zurückgibt, genau wie * getTime *. – RobG

0

Es gibt viele Antworten hier, um die Fragen zu Parsing, ist unter dem Strich, dass Sie eine maßgeschneiderte Funktion in ein paar Zeilen schreiben können, aber wahrscheinlich ist es besser, eine kleine Analyse und Formatierung Bibliothek zu bekommen den Job zu erledigen. Es gibt viele davon, wie moment.js, date.js und fecha.js.

Zum Beispiel mit fecha.js und ein Eingabeformat wie 18/7/2016 15.16.40 unter der Annahme, die als lokale behandelt werden sollten, würden Sie einen getEarliest Funktion so etwas wie tun:

/* Convert args to Dates, return earliest as a Date 
** or first as a date if they are equal. 
** requires fecha.js https://github.com/taylorhakes/fecha 
** 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
** @returns {Date} earliest of dateStr0 and dateStr1 or dateStr0 if equal 
*/ 
function getEarliest(dateStr0, dateStr1) { 
    var d0 = fecha.parse(dateStr0, 'DD/MM/YYYY hh:mm:ss'); 
    var d1 = fecha.parse(dateStr1, 'DD/MM/YYYY hh:mm:ss'); 
    return d1 < d0? d1 : d0; 
} 

Ohne allgemeine Parser können Sie Verwenden Sie eine Funktion wie die folgende und ersetzen Sie damit das Parsing-Bit. Sie sollten auch prüfen, das Ergebnis der Parsen um sicherzustellen, dass es ein gültiges Datum erstellt:

/* Parse string in format DD/MM/YYYY hh:mm:ss 
 
** @param {string} s - date string in format DD/MM/YYYY hh:mm:ss 
 
** @returns {Date} if values invalid, returns invalid Date 
 
*/ 
 
function parseDate(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[2], --b[1], b[0], b[3], b[4], b[5]); 
 
    return d && d.getMinutes() == b[4] && d.getDate() == b[0] && d.getMonth() == b[1]? d : new Date(NaN); 
 
} 
 

 
/* Convert args to Dates, return earliest as a Date 
 
** or first as a date if they are equal. 
 
** If either date is invalid, returns undefined 
 
** 
 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @returns {Date} earliest of dateStr0 and dateStr1 or 
 
**     dateStr0 if equal or 
 
**     undefined if either is invalid 
 
*/ 
 
function getEarliest(dateStr0, dateStr1) { 
 
    var d0 = parseDate(dateStr0); 
 
    var d1 = parseDate(dateStr1); 
 
    if (isNaN(d0) || isNaN(d1)) return; 
 
    return d1 < d0? d1 : d0; 
 
} 
 

 
// Both valid dates 
 
console.log(getEarliest('15/08/2016 15:23:48', '18/08/2016 17:25:08')) 
 

 
// One date invalid 
 
console.log(parseDate('15/08/2016 15:73:48', '18/08/2016 17:25:08'))