2016-08-23 12 views
0

Ich arbeite an einer Antwort von einem Skript, um ein Ablaufdatum zu erarbeiten. Die Antwort ist 7200 die mir vom Entwickler geraten wurde ist ein Epochenwert, der 3 Monaten entsprechen sollte. Ich habe Epoch nie zuvor benutzt, also verstehe nicht, wie das funktioniert?Epoch hinzufügen, um ein neues Datum in Javascript zu finden

Die Formel, die ich verwendet habe, ist (created_at + expires_in) * 1000, die mir geraten wurde, wird mir mein neues Datum geben.

Ich verwendete dtmNow = new Date(Date.now()).toISOString();, die 2016-08-23T06:33:35.936Z zurückgab, die richtig war, aber als ich dtmExpires = new Date((Date.now()+7200)*1000).toISOString(); versuchte, gab es +048613-09-25T09:58:58.000Z zurück?

Ich bin mir nicht sicher, was ich hier falsch mache? Kann mir bitte jemand in die richtige Richtung zeigen?

+0

Eine Epoche ist ein Benchmark, dass die Dinge gemessen werden relativ zu. Die Epoche für JavaScript-Zeitwerte ist 1970-01-01T00: 00: 00Z. Unterschiede werden in Millisekunden gemessen, 7200 sind 7,2 Sekunden nach der Epoche. Es gibt keine Maßeinheit, in der 7.200 von ihnen 3 Monaten entsprechen, was ungefähr 7.776 Millisekunden entspricht. – RobG

+0

@RobG danke! Ich habe meinen Code in 'dtmExpires = new Date (Date.now() + (7200 * 1000000)) geändert. ToISOString();' und es gab '2016-11-14' zurück, was 84 Tage ist: D Wenn du als ein postest Antwort Ich nehme an :) – dpDesignz

Antwort

1

Date.now() gibt die Anzahl der Millisekunden seit der Epoche zurück (der aktuelle Zeitwert). Wenn Sie eine Zahl an den Date-Konstruktor übergeben, wird sie als Zeitwert für eine neue Date-Instanz verwendet. Im Folgenden:

new Date(Date.now()).toISOString() 

ist genau das gleiche wie:

new Date().toISOString() 

heißt Sie nicht brauchen Date.now(). Wenn Sie 3 Monate zu einem Zeitpunkt hinzufügen möchten, benutzen Sie Datum Methoden:

// Get a Date for now 
var now = new Date(); 

// Add 3 months 
now.setMonth(now.getMonth() + 3); 

Allerdings, wenn es zur Zeit 30. November dann über die versuchen, einen Termin für 30. Februar zu schaffen, die 1 sein wird am Ende oder 2 März abhängig davon, ob es in einem Schaltjahr ist oder nicht. Wenn also der geänderte Tag im Monat nicht mit dem Original übereinstimmt, können Sie ihn auf den letzten Tag des vorherigen Monats zurücksetzen.

Wenn Sie wollen (sagen wir) 90 Tage hinzuzufügen, gehen Sie dann, dass die setDate und getDate Methoden ähnlich der folgenden verwenden. Dies berücksichtigt auch die Grenzen für die Sommerzeit, wenn Sie eine Grenze überschreiten, während das Festlegen des Zeitwerts dies nicht tut.

Die SO Konsole schreibt Daten in UTC, so dass berücksichtigen, wenn sie bei den folgenden Resultaten:

function add3Months(d) { 
 
    // Default to current date if d not provided 
 
    d = d || new Date(); 
 
    
 
    // Remember current date 
 
    var date = d.getDate(); 
 
    
 
    // Add 3 months 
 
    d.setMonth(d.getMonth() + 3); 
 
    
 
    // Set the date back to the last day of the previous 
 
    // month if date isn't the same 
 
    if (d.getDate() != date) d.setDate(0); 
 
    
 
    return d; 
 
} 
 

 
// Add 3 months to today 
 
console.log(add3Months()); 
 

 
// Add 3 months to 30 November 
 
console.log(add3Months(new Date(2016,10,30)))

+0

Leider muss ich die Antwort verwenden, die von der API angegeben wird, die ich verwende, die 7200 ist, also muss ich das 'Date.now() + (7200 * 1000000)' dafür verwenden genau sein, wenn sie die Antwort ändern. Es wird nicht immer 3 Monate dauern. Es muss auch nicht 3 Monate genau sein. Es ist was auch immer sie sagen. Danke für diese Info! Sehr hilfreich. – dpDesignz

+0

Ah, fair genug. – RobG

Verwandte Themen