2016-05-23 25 views
2

UTCオフセットに基づいて現在の日付を取得するにはどうすればよいですか?たとえば、オーストラリアのUTCオフセットは、すでに5月24日のUTC + 10:00です。JavaScript - UTCオフセットを使用して現在の日付を取得

UTCの日付と時間を取得できますが、UTCオフセットを考慮したDateメソッドは見つかりません。 Moment.jsを使用して

+1

もっと簡単な方法は、おそらくmoment.jsを使用することです。http://momentjs.com/timezone/ – Frax

+0

オーストラリアとその領土には、+05:00〜+ 11:00の範囲のいくつかのタイムゾーンがあります。 – RobG

答えて

4

あなたはオフセット(この場合は10時間)、この機能を使用したら:あなたが使用することになり、あなたの場合は

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; 
} 

var timeInAustralia = getDateWithUTCOffset(10); 

これはDateを返します。オブジェクト。あなたはまだあなたの好みに日付を書式設定する必要があります。

私は@Fraxに同意します.Momentはあなたのプロジェクトに依存関係を追加しても構いません。あなたは10のようにオフセットしているので、もし

幸運

+0

すべてのオフセットが時間単位であるわけではありません。それらは一般的に "+05:30"や "+0530"のような文字列で表されます。 – RobG

+0

その場合、 '5.5'を' inputTzOffset'として使うことができます – victmo

1

Moment Timezoneそれは非常に簡単です:

moment().tz("Australia/Sydney").format() 
1

Dateオブジェクトは、UTCのメソッドを持っている:00あなたは、単にUTC時間にそれを適用し、その結果UTC値を読み取ることができます。オフセットは、時および分として適用することも、単一の値に変換して適用することもできます。

/* 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));

また、オフセットと読み、 "ローカル" の値の日付調整することができます。しかし

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))

注意をそのデフォルトのtoString現地時間帯を報告しますオフセットは調整されていないので、そのようなオブジェクトを使用するときは注意してください。

関連する問題