2012-08-17 11 views
5

Ich habe ein Problem mit der DateDiff-Funktion. Ich versuche den Unterschied zwischen zwei Daten herauszufinden. Ich habe diesen Beitrag (What's the best way to calculate date difference in Javascript) gelesen und habe mir auch dieses Tutorial angesehen (http://www.javascriptkit.com/javatutors/datedifference.shtml), aber ich kann es nicht verstehen.Javascript DateDiff

Hier ist, was ich versuchte, ohne Erfolg zu arbeiten. Könnte mir bitte jemand sagen, was ich mache und wie ich das vereinfachen kann. Scheint etwas übercodiert ...?

//Set the two dates 
var currentTime = new Date(); 
var month = currentTime.getMonth() + 1; 
var day = currentTime.getDate(); 
var year = currentTime.getFullYear(); 
var currDate = month + "/" + day + "/" + year; 
var iniremDate = "8/10/2012"; 

//Show the dates subtracted 
document.write('DateDiff is: ' + currDate - iniremDate); 

//Try this function... 
function DateDiff(date1, date2) { 
    return date1.getTime() - date2.getTime(); 
} 

//Print the results of DateDiff 
document.write (DateDiff(iniremDate, currDate); 

Antwort

5

Ihr erster Versuch macht Addition zuerst und dann Subtraktion. Sie können die Strings trotzdem nicht subtrahieren, so dass sich NaN ergibt.

Die zweite Version hat keine Schließung ). Abgesehen davon rufen Sie getTime auf Strings. Sie müssten new Date(...).getTime() verwenden. Beachten Sie, dass Sie das Ergebnis in Millisekunden erhalten, wenn Sie Daten subtrahieren. Sie könnten das formatieren, indem Sie ganze Tage/Stunden/etc.

+0

Wie Sie sagten, würde es einen negativen Wert zeigen. Ist das richtig, scheint es richtig zu sein, weil es die negativen Werte zeigt. \t \t document.write (neues Datum (iniremDate) neues Datum (currDate)); \t \t \t \t Funktion DatDiff (date1, date2) { \t \t return date1.getTime() - date2.getTime(); \t \t} \t \t \t \t \t document.write (DateDiff (new Date (iniremDate), new Date (CurrDate))); –

+0

Seit "iniremDate" ist der 10. August und es ist der 17. jetzt, Sie erhalten offensichtlich einen negativen Wert. Wenn Sie das Gegenteil subtrahieren wollen, subtrahieren Sie "date1" von "date2". – pimvdb

+0

Der Rückgabewert ist -604800000 Ich nehme an, dass es in Sekunden so lange her ist? –

9

Okay für diejenigen, die ein funktionierendes Beispiel hier haben möchten, ist eine einfache DateDiff ex, die Datum diff für Tag in einem negativen Wert (Datum bereits bestanden) oder positiv (Datum kommt).

BEARBEITEN: Ich habe dieses Skript aktualisiert, so dass es die Arbeit für Sie ausführen und die Ergebnisse in diesem Fall ein -10 konvertieren wird, was bedeutet, dass das Datum vergangen ist. Geben Sie Ihre eigenen Daten für currDate und iniPasedDate ein und Sie sollten gut gehen !!

//Set the two dates 
var currentTime = new Date() 
var currDate  = currentTime.getMonth() + 1 + "/" + currentTime.getDate() + "/" + currentTime.getFullYear() //Todays Date - implement your own date here. 
var iniPastedDate = "8/7/2012" //PassedDate - Implement your own date here. 

//currDate = 8/17/12 and iniPastedDate = 8/7/12 

function DateDiff(date1, date2) { 
    var datediff = date1.getTime() - date2.getTime(); //store the getTime diff - or + 
    return (datediff/(24*60*60*1000)); //Convert values to -/+ days and return value  
} 

//Write out the returning value should be using this example equal -10 which means 
//it has passed by ten days. If its positive the date is coming +10.  
document.write (DateDiff(new Date(iniPastedDate),new Date(currDate))); //Print the results... 
+1

Beachten Sie, dass dies sehr begrenzt ist - 'getDay' gibt den Wochentag zurück, so dass es im Grunde nur verwendbar ist, wenn beide Daten in derselben Woche sind (' iniremDate = "8/8/2012" 'würde das gleiche Ergebnis liefern)). – pimvdb

+0

@pimvdb was ist, wenn Sie getTime verwenden, funktioniert das dann für jedes Datum? –

+1

'getTime' ist nicht relativ zur aktuellen Woche oder so ähnlich; es gibt eine eindeutige Nummer für jedes Datum, so dass es für Ihre Bedürfnisse zuverlässig ist. Das einzige Problem ist, dass Sie die Millisekunden-Differenz in einen Tag-Unterschied selbst umwandeln müssen. – pimvdb

2
function setDateWeek(setDay){ 
    var d = new Date(); 
    d.setDate(d.getDate() - setDay); // <-- add this 
    var curr_date = d.getDate(); 
    var curr_month = d.getMonth() + 1; 
    var curr_year = d.getFullYear(); 
    return curr_date + "-" + curr_month + "-" + curr_year; 
} 


setDateWeek(1); 
0

Keine Notwendigkeit JQuery oder andere Drittanbieter-Bibliothek aufzunehmen.

Geben Sie das Eingabedatumsformat im Titel-Tag an.

HTML:

< script type = "text/javascript" src = "http://services.iperfect.net/js/IP_generalLib.js">

verwenden Javascript-Funktion:

IP_dateDiff (strDate1, strDate2, strDateFormat, debug [true/false])

alert (IP_dateDiff ('11 -12-2014' , '2014.12.12', 'DD-MM-YYYY', false));

IP_dateDiff Funktion gibt die Anzahl der Tage zurück.