Ich versuche, zwei verschiedene Daten zu vergleichen, um festzustellen, ob das eingegebene Datum nach 7 Tagen des heutigen Datums liegt. Ich habe ein bisschen gegoogelt und mir Folgendes ausgedacht:

function val_date(input){
    var date = new Date(input);
    date = date.getTime() / 1000;
    var timestamp = new Date().getTime() + (7 * 24 * 60 * 60 * 1000)
    window.alert("Date: "+date + " = N_Date: "+timestamp);
    if(timestamp > date || timestamp === date){
        // The selected time is less than 7 days from now
        return false;
    }
    else if(timestamp < date){
    // The selected time is more than 7 days from now
        return true;
    }
    else{
    // -Exact- same timestamps.
        return false;
    }
}

Ich verwende eine Warnung, damit ich meinen Fortschritt überprüfen kann, um sicherzustellen, dass die Daten unterschiedlich sind. Die Ausgabe der Warnung sagt nur:

Datum: NaN = N_Date = 13255772630 (<- oder so ähnlich).

Gibt es etwas, was ich hier falsch mache?
Ich bin mir nicht sicher, ob es hilft, aber mein Datumsformat ist TT-MM-JJJJ

1
Paul Ledger 23 Nov. 2013 im 16:43

6 Antworten

Beste Antwort

Wenn Sie Daten vergleichen und keine Zeit angeben möchten, können Sie Folgendes verwenden:

// dateString is format DD-MM-YYYY
function isMoreThan7DaysHence(dateString) {

    // Turn string into a date object at 00:00:00
    var t = dateString.split('-');
    var d0 = new Date(t[2], --t[1], t[0]);

    // Create a date for 7 days hence at 00:00:00
    var d1 = new Date();
    d1.setHours(0, 0, 0, 0);
    d1.setDate(d1.getDate() + 7);

    return d0 >= d1;
}

Beachten Sie, dass die Stunden für das heutige Datum auf Null gesetzt werden müssen.

4
RobG 23 Nov. 2013 im 13:10

Datum: NaN Da es nicht möglich ist, ein Datum zu erstellen, das Sie an die Datumserstellung übergeben


Geigen-Demo

Date.prototype.addDays = function (days) {
    this.setDate(this.getDate() + days);
    return this;
};

function val_date(input) {
    var inputDate = new Date(input);
    var dateWeek = new Date().addDays(7);
    console.log(inputDate, dateWeek);
    if (inputDate < dateWeek) {
        // The selected time is less than 7 days from now
        return false;
    } else {
        // The selected time is more than 7 days from now
        return true;
    }
}
2
Tushar Gupta - curioustushar 23 Nov. 2013 im 12:53

Verwenden von moment.js:

moment([2013, 2, 29]).fromNow();
0
Mark Simpson 23 Nov. 2013 im 12:51

Dies ist ziemlich häufig und wenn Sie Daten manipulieren, möchten Sie möglicherweise eine Javascript-Bibliothek dafür verwenden. Es gibt eine ausgezeichnete auf moment.js

Mit diesem würden Sie etwas tun wie:

moment().add('days', 7)

Eine Woche in der Zukunft finden.

0
SnapShot 23 Nov. 2013 im 12:59

Angenommen, die Eingabe ist ein gültiges Javascript-Datumsobjekt, könnten Sie vielleicht Folgendes versuchen:

function dateDifference(oldDate) {
    var currentDate = new Date();
    var difference = currentDate - oldDate; //unit: milliseconds
    var numDays = 7;
    var threshHoldTime = numDays * (24 * 60 * 60 * 1000); //seven days in milliseconds
    if (difference > threshHoldTime ) {
        console.log("The difference is greateer then then 7 days");
    }
    else {
        console.log("the date is not enough: " + difference);
    }
}
0
mipmap 23 Nov. 2013 im 13:00

Versuchen Sie es so

var date = new Date(input).getTime(); // Get the milliseconds
var today = new Date();    

//You can't compare date, 
//so convert them to milliseconds
today = new Date(today.setDate(today.getDate() + 7)).getTime(); 
if (inputDate < today) {
    // The selected time is less than 7 days from now
    return false;
 } else if{ ()
    // -Exact- same timestamps.
    return false;
 }
 else {
    // The selected time is more than 7 days from now
    return true;
 }
0
Praveen 23 Nov. 2013 im 13:08