2016-12-04 3 views
1

ich in moment.js folgend bin mit Sekunden bis Tagen Stunden Minuten Sekunden Formatmoment.js Zeit falsch berechnet

moment().startOf('year').seconds(1209600).format('DD HH:mm:ss')

Aber statt 14 00:00:00 zu bekommen, erhalte ich 15 00:00:00

konvertieren Was fehlt mir hier?

+1

Sie vermissen, dass ein Jahr am 1. Januar und 1 + 14 = 15. – RobG

+0

Suchen Sie eine beginnt "Dauer" von 14 Tagen? Das ist ganz anders als am 14. Januar. –

+1

ja, tatsächlich ist die Dauer das, was ich wollte ... – hnvasa

Antwort

3

1209600 Sekunden ist 14 Tage, also, weil der erste Tag des Jahres Tag 01 00:00:00 ist, wenn Sie 14 Tage hinzufügen, erhalten Sie 15 00:00:00.

Sie sagen nicht genau, was Sie versuchen zu tun, aber was Sie bekommen, ist die richtige Antwort für "Was ist das Datum/die Zeit für 1209600 Sekunden in das Jahr."

+0

okay ... danke für deine Antwort. Können Sie mir sagen, wie Sie das obige Skript am besten ändern können? – hnvasa

+0

Fügen Sie nur 13 Tage statt 14 hinzu ;-)? Beziehungsweise, addiere 1 Sekunde weniger, so dass du am 14. Januar, 23.59.59 endet. –

+0

ich übergebe diesen Wert nicht selbst ... ein zufälliger Wert wird vom System abgerufen und in das erforderliche Format konvertiert ... der Wert könnte alles von 1 bis 3000000 sein – hnvasa

0
moment().startOf('year'); // set to January 1st, 12:00 am this year 

So startOf('year') Verfahren eingestellt Moment dem 1. Januar Ausgangspunkt des laufenden Jahres von 12.00 AM , der Beginn des Tages ist. und du fügst noch 14 Tage hinzu. Aber da das Anfangsdatum um 12.00 Uhr begann, ist es immer noch ein ganzer Tag (ends at 11.50 PM), der einen zusätzlichen Tag im Endergebnis hinzufügt.

1

Sie versuchen, mit dem Konzept der Dauer zu arbeiten, aber Sie verwenden den Kalender, um es zu tun. Dies ist aus mehreren Gründen keine gute Idee. Wie andere darauf hingewiesen haben, beginnt der Kalender am 1., der dich abwirft. Aber auch lokale Diskontinuitäten in der Zeitzone können sich auf Ihre Ergebnisse auswirken, z. B. wenn Ihre Dauer weit genug in das Jahr hineingegangen ist, um von der frühzeitigen Sommerzeitumstellung erfasst zu werden.

Wenn Sie Moment verwenden möchten mit einer Dauer zu arbeiten, gibt es a separate API for that:

var d = moment.duration(1209600, 'seconds'); 

var h = d.hours(); 
var m = d.minutes(); 
var s = d.seconds(); 

Es gibt derzeit kein format Verfahren für eine Dauer eingebaut, so dass Sie diese in einen String zusammenbauen müss Sie selbst, Null-Padding wo notwendig anwenden. Allerdings gibt es die moment-duration-format Drittanbieter-Plugin, das Sie tun es so lassen würde:

moment.duration(1209600, 'seconds').format('DD HH:mm:ss') 
Verwandte Themen