webForumDet fria alternativet
Logga in / Bli medlem

Hur jämför man om datum

JavaScript

3 svar · 369 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Frågan#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.

400 ms totalt · 4 externa anrop · v20260731065814-full.fc66e30b
130 ms — deklarationer (db)
130 ms — hämta statistik (db)
136 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)