Hur jämför man om datum

JavaScript

3 svar · 371 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Trådstart#1

Låt oss säga att jag har två datum

Datum 1 2007-06-14
Datum 2 2008-10-25T14:57:52+02:00

Hur kollar jag enklast om datum 1 är lägre än datum 2?

Medlem sedan juni 20014 421 inlägg
#2

Det finns ingen färdig funktion i Date-objektet för att plocka ut datum från ISO-strängen utan den måste byggas själv. Likadant så är det första datumet inte korrekt formaterat för att skapa ett korrekt datum via new Date(). Lösningen får alltså bli såhär för dina datum.

<script>
Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}

var oldDate=new Date();
var newDate=new Date();

oldDate.setDate(14)
oldDate.setMonth(5) //javscripts datum räknar från 0
oldDate.setFullYear(2007)
newDate.setISO8601("2008-10-25T14:57:52+02:00")

alert(oldDate)
alert(newDate)

alert(oldDate<newDate)
</script>

Har du däremot två redan skapadae datum i javascript som du vet är korrekta är det bara att använda lt ( < ) och gt ( > ).

Medlem sedan juni 20006 031 inlägg
#3

Ok, får kolla på det.
Datum 1 kommer från ett formulär och datum 2 hämtar jag från en xml fil.

Medlem sedan juni 20014 421 inlägg
#4

Om jag var osäker på hur folk skrev in dem via formuläret hade jag skrivit ett regeexp och försökt hämta ut uppgifterna med det.

259 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)