2016-05-23 41 views
2

如何根據UTC偏移量獲取當前日期?例如,澳大利亞的UTC Offset在UTC +10:00已經是5月24日。JavaScript - 使用UTC偏移量獲取當前日期

我可以得到UTC的日期和小時,但找不到任何Date偏差因子的日期方法。

+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是一個優秀的庫。

好運

+0

並非所有的偏移都是整個小時。它們通常表示爲「+05:30」或「+0530」之類的字符串。 – RobG

+0

在這種情況下,你可以使用'5.5'作爲'inputTzOffset' – victmo

1

Date對象有UTC的方法,所以如果你有一個像+10偏移: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將報告當地時間zon e偏移量,而不是調整後的偏移量,所以在使用這樣的對象時要小心。