2016-05-23 13 views
2

Wie kann ich das aktuelle Datum basierend auf UTC Offset abrufen? Zum Beispiel ist der UTC-Offset für Australien UTC +10: 00, wo es bereits der 24. Mai ist.JavaScript - aktuelles Datum mit UTC-Offset abrufen

Ich kann UTC-Datum und -Stunde abrufen, kann aber keine Datumsmethoden finden, die UTC-Offset berücksichtigen.

+1

Der einfachere Weg wäre wahrscheinlich, moment.js zu verwenden: http://momentjs.com/timezone/ – Frax

+0

Australien und seine Territorien haben mehrere Zeitzonen, von +05: 00 bis +11: 00. – RobG

Antwort

4

Sobald Sie den Offset (in diesem Fall 10 Stunden) hat diese Funktion nutzen:

function getDateWithUTCOffset(inputTzOffset){ 
    var now = new Date(); // get the current time 

    var currentTzOffset = -now.getTimezoneOffset()/60 // in hours, i.e. -4 in NY 
    var deltaTzOffset = inputTzOffset - currentTzOffset; // timezone diff 

    var nowTimestamp = now.getTime(); // get the number of milliseconds since unix epoch 
    var deltaTzOffsetMilli = deltaTzOffset * 1000 * 60 * 60; // convert hours to milliseconds (tzOffsetMilli*1000*60*60) 
    var outputDate = new Date(nowTimestamp + deltaTzOffsetMilli) // your new Date object with the timezone offset applied. 

    return outputDate; 
} 

In Ihrem Fall würden Sie verwenden:

var timeInAustralia = getDateWithUTCOffset(10); 

Dies wird eine Date zurückgeben Objekt. Sie müssen das Datum nach Ihren Wünschen formatieren.

Ich stimme @Frax zu, Moment ist eine großartige Bibliothek, wenn es Ihnen nichts ausmacht, zusätzliche Abhängigkeiten zu Ihrem Projekt hinzuzufügen.

Viel Glück

+0

Nicht alle Offsets sind ganze Stunden. Sie werden im Allgemeinen als eine Zeichenfolge wie "+05: 30" oder "+ 0530" ausgedrückt. – RobG

+0

In diesem Fall können Sie '5.5' als' inputTzOffset' verwenden – victmo

1

Date-Objekte haben UTC Methoden, wenn Sie also eine wie 10 versetzt haben: 00 Sie können es einfach gelten für die UTC-Zeit und dann die daraus resultierenden UTC Werte lesen. Der Versatz kann als Stunden und Minuten angewendet werden oder in einen einzelnen Wert umgewandelt werden und z.

/* Return a date in yyyy-mm-dd format for the provided offset 
 
** @param {string} offset - offset from GMT in format +/-hh:mm 
 
**       - default sign is +, default offset is 00:00 
 
** @returns {string} date at pffset in format yyyy-mm-dd 
 
*/ 
 
function dateAtOffset(offset){ 
 
    function z(n){return (n<10?'0':'') + n} 
 
    var d = new Date(); 
 
    var sign = /^\-/.test(offset)? -1 : +1; 
 
    offset = offset.match(/\d\d/g) || [0,0]; 
 
    d.setUTCMinutes(d.getUTCMinutes() + sign*(offset[0]*60 + offset[1]*1)) 
 
    return d.getUTCFullYear() + '-' + z(d.getUTCMonth() + 1) + '-' + z(d.getUTCDate()); 
 
} 
 

 
var offset = '+10:00'; 
 
document.write('The date at GMT' + offset + ' is: ' + dateAtOffset(offset));

Sie können auch einen Termin für den Offset- und lesen "local" Werte einstellen:

function timeAtOffset(offset) { 
 
    var d = new Date(); 
 
    var sign = /^\-/.test(offset)? -1 : 1; 
 
    offset = offset.match(/\d\d/g) || [0,0]; 
 
    d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + sign*(offset[0]*60 + offset[1]*1)); 
 
    return d; 
 
} 
 

 
var offset = '-04:00'; 
 
document.write('Time at GMT' + offset + ' is: ' + timeAtOffset(offset))

ist jedoch zu beachten, dass die Standard toString wird die lokale Zeit zon melden e Offset, nicht der, auf den es eingestellt wurde, also sei vorsichtig, wenn du ein solches Objekt verwendest.