如何根据UTC偏移量获取当前日期?例如,澳大利亚的UTC偏移量为UTC +10:00,已经是5月24日。
我可以获得UTC日期和时间,但无法找到影响UTC偏移量的任何日期方法。
答案 0 :(得分:7)
获得偏移量(在这种情况下为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是一个很棒的库。
祝你好运答案 1 :(得分:1)
使用Moment.js和Moment Timezone非常简单:
moment().tz("Australia/Sydney").format()
答案 2 :(得分:1)
日期对象具有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 将报告本地时区偏移量,而不是已经调整过的偏移量。因此在使用此类对象时要小心。