2016-10-29 4 views
-1

Ich versuche, ein Datumsobjekt in UTC zu konvertieren und dann in JJJJMMTT-Format zu konvertieren. Hier ist mein CodeUTC-Zeit in JJJJMMTT-Format konvertieren Javascript

var scheduleDate = '2016/10/29 17:00'; 
 
var d = new Date(scheduleDate); 
 
var utcdate = d.toUTCString(); 
 

 
var mm = utcdate.getUTCMonth() + 1; 
 
var dd = utcdate.getUTCDate(); 
 

 
alert([date.getUTCFullYear(), !mm[1] && '0', mm, !dd[1] && '0', dd].join(''));

Aber ich bin die unten stehende Störung zu erhalten:

utcdate.getUTCMonth is not a function

Wie kann ich den Monat und das Datum aus einem UTC Zeichenfolge Datumsformat erhalten ?

+2

Entfernen Sie die 'var utcdate = ...'line und rufe direkt die UTC-Methoden auf' d' an – Andreas

+1

getUTCMonth() ist eine Methode des Date-Prototyps, die versucht, sie in einem String-Objekt (utcdate) zu verwenden. Sie können es (und die anderen Funktionen von Date proptotype) für Ihre d-Variable verwenden. –

Antwort

1

Ihre Variable utcdate ist ein String und hat daher keine getUTCMonth oder getUTCDate Methoden.

Weiter unten rufen Sie die getUTCFullYear Methode für eine Variable, die nicht definiert ist: date.

Schließlich ist die Art und Weise versuchen, Sie mit Nullen aufzufüllen wird nicht funktionieren, da mm und dd sind keine Strings, und so, wenn Sie indizieren sie mit [1] wird JavaScript, diese Zahlen zu Number Objekte zwingen, aber sie haben nicht eine 1 Eigenschaft, auch wenn sie zwei Ziffern haben. So bekommst du immer die gepolsterte 0 obendrauf.

Wenn Sie beheben, dass, indem man zuerst die Zahlen in Strings zu zwingen, wäre es immer noch nicht funktionieren, da der && Operator false in einigen Fällen ergeben werden, die als solche ausgegeben werden: false.

Lange Rede, kurzer Sinn, es gibt einfachere Möglichkeiten, das UTC yyyymmdd-Format eines Datums zu erhalten. Zum Beispiel indem sie sie von der linken Seite des yyyy-mm-ddThh:nn:ss..... Format, dass toISOString kehrt Extrahieren:

var d = new Date('2016/10/29 17:00'); 
 

 
console.log(d.toISOString().replace(/-|T.*/g,''));

Beachten Sie, dass die UTC-Datum zu einigen Zeitpunkten ist ein freier Tag im Vergleich zu dem in die lokale Zeitzone. Wenn Sie das verhindern müssen, dann würde ich mit toLocaleDateString mit einem locale vorschlagen, die ein big-endian date format standard, wie Schweden hat, Litauen, Ungarn, Südkorea, ...:

date.toLocaleDateString('se') 

die Trennzeichen entfernen (-) ist nur eine Frage, die nicht-Ziffern ersetzt:

var d = new Date('2016/10/29 17:00'); 
 

 
console.log(d.toLocaleDateString('se').replace(/\D/g, ''));

1

Wenn das bekannte Datum für UTC-Zeitzone ist, können Sie das Datum Objekt mit dem 0 erstellenMethode, dann können Sie das Datum lokal auf dem Client (Browser) Zeitzone angezeigt werden wie folgt:

//var scheduleDate = '2016/10/29 17:00'; 
 
// If known date is in UTC, create the date object like so: 
 
var d = new Date(Date.UTC(2016,(10 - 1),29,17,0)); 
 

 
// UTC version of the date 
 
var mmUTC = d.getUTCMonth() + 1; 
 
var ddUTC = d.getUTCDate(); 
 
var hhUTC = d.getUTCHours(); 
 
// local to the browser (client) time zone 
 
var mm = d.getMonth() + 1; 
 
var dd = d.getDate(); 
 
var hh = d.getHours(); 
 

 
// display values 
 
console.log('UTC values: hour:['+ hhUTC +'] month:['+ mmUTC +'] day:['+ ddUTC +']'); 
 
console.log('Client Time: hour:['+ hh +'] month:['+ mm +'] day:['+ dd +']'); 
 
console.log('Client yyyymmdd:['+ d.getFullYear() + ((mm < 10) ? '0'+ mm : mm) + dd +']');

Verwandte Themen