2016-04-27 9 views
-1

Ich arbeite an einem Projekt und plötzlich ein Problem gefunden. Problem war, dass der Server Unix-Zeitstempel sendet, was GMT ist, aber aufgrund der Sommerzeit wurde das Datum als GMT aufgefüllt. Es kann vom Server Ende erreichbar sein, aber es gibt sehr einfache Art und Weise, wo wir es zu lokaler Zeitzone (in meinem Fall MGZ BST) umwandeln könnenWie Tag Licht speichern und konvertieren zu BST (lokale Zeit) in Moment js

Erstellen Sie drei Variablen

  1. getPerfectLocalTime
  2. yourUnixTimestamp
  3. yourFormat

und unterhalb der Logik ist, können Sie

var GMTtime = moment(yourUnixTimestamp*1000).format('YYYY-MM-DD HH:mm:ss'); // It should be YYYY-MM-DD format 
 
var convertToUtc = moment.utc(GMTtime).format('YYYY-MM-DD HH:mm:ss'); 
 
var localTimeToDate = moment.utc(convertToUtc).toDate(); 
 

 
var isDSTDateTime = moment(GMTtime, 'YYYY-MM-DD'); 
 
var month = isDSTTime.format('M'); 
 
var day = isDSTTime.format('D'); 
 
var year = isDSTTime.format('YYYY'); 
 
if(moment([year, month, day]).isDST()){ 
 
\t getPerfectLocalTime = moment(localTimeToDate).format(yourFormat); 
 
}else { 
 
\t getPerfectLocalTime = moment(yourUnixTimestamp*1000).format(yourFormat); 
 
}

Hoffe, dass es jemand in der Programmierung Welt hilft :)

+0

Gibt es hier eine Frage? Ich kann Ihren Code erheblich vereinfachen, wenn Sie danach fragen. –

+0

Und eigentlich ist die Berechnung hier falsch. Im Allgemeinen, wenn Sie durch Parsing und Formatierung Reifen springen, tun Sie wahrscheinlich es falsch machen. –

+0

Hallo Matt, danke für deine Antwort. Das ist eigentlich keine Frage. Dies ist nur ein Beitrag, der jemandem helfen kann, der es nutzen möchte. Tut mir leid zu sagen, es funktioniert perfekt für mich. Es wäre toll, wenn du mir sagen könntest, wo es falsch ist, damit ich es korrigieren kann. Danke – Mihir

Antwort

0

Da der einzige Eingang in Ihrem Beispiel ist yourUnixTimestamp, und Sie mit 1000 multipliziert werden, werde ich davon ausgehen, dass dies ein traditionelles Unix Timestamp - eine Ganzzahl in ganzen Sekunden seit Mitternacht 1970-01-01 UTC.

Rufen Sie einfach moment.unix an, um diese spezielle Art von Eingabewert zu analysieren. Das resultierende Objekt moment befindet sich bereits im lokalen Modus, Sie können es also direkt formatieren.

moment.unix(yourUnixTimestamp).format(yourFormat) 

Wenn Sie wissen wollen, ob oder ob nicht DST in der Tat in der lokalen Zeitzone ist, können Sie einfach direkt für das auch fragen.

moment.unix(yourUnixTimestamp).isDST() 

Aber beachten Sie, dass Sie dies nicht wissen müssen, um die Uhrzeit korrekt zu formatieren. Moment berücksichtigt dies bereits intern.