强制浏览器以特定时区显示所有日期



我怎么能强迫Browser显示所有的date objects使用Specific Timezone。像传递Europe/London .有什么办法这样做吗?

这里我想要的是所有的Jquery Datepicker打开日期和时间按照特定时区而不是客户端的机器。

你不能"设置"时区偏移量,它是一个基于系统设置的只读属性。

您可以通过简单地添加客户端时区偏移量,然后添加您想要的任何偏移量来生成任何时区偏移量的时间和日期值(注意javascript date对象的时区偏移量与通常的值相反,因此您可以添加两者而不是减去一个并添加另一个)。

// Provide offsetInMintes to add to UTC to get required time,
// e.g. Nepal Standard Time is UTC +05:45 -> +345 minutes
function generateOffsetTime(offsetInMinutes) {
  function z(n){return (n<10? '0' : '') + n;}
  var d = new Date();
  d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + offsetInMinutes);
  return [z(d.getHours()),z(d.getMinutes()),z(d.getSeconds())].join(':');
}
alert('The time in Nepal is ' + generateOffsetTime(345));

编辑

你可以添加你自己的方法到Date.prototype:

Date.prototype.setOffset = function(offsetInMinutes, offsetName) {
  this._offsetInMinutes = offsetInMinutes;
  this._offsetName = offsetName;
};
Date.prototype.getOffsetFullDate = (function() {
  var months = ('January February March April May June July ' +
               'August September October November December').split(' ');
  var days = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' ');
  return function() {
    var d = new Date(+this);
    d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + this._offsetInMinutes);
    return days[d.getDay()] + ' ' + d.getDate() + ' ' + months[d.getMonth()] + 
           ', ' + this.getFullYear();  
  }
}());
Date.prototype.getOffsetTime = (function() {
  function z(n){return (n<10? '0' : '') + n;}
  return function() {
    var d = new Date(+this);
    d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + this._offsetInMinutes);
    return z(d.getHours()) + ':' + z(d.getMinutes()) + ':' +
           z(d.getSeconds()) + ' ' + this._offsetName;  
  }  
}());
var d = new Date();
d.setOffset(345, 'NST')
console.log(d.getOffsetFullDate() + ' ' + d.getOffsetTime());

请注意,这保留了date对象的原始时间值,它在检索值时进行调整,以便可以更改时区以获得相同date对象的不同值,因此您可以继续使用:

d.setOffset(600, 'AEST');
console.log(d.getOffsetFullDate() + ' ' + d.getOffsetTime());
d.setOffset(630, 'LHI');
console.log(d.getOffsetFullDate() + ' ' + d.getOffsetTime());

但我仍然认为最好构建自己的日期构造函数,利用内置的date而不是扩展它。

Moment.js是一个很好的库,它可以帮助你实现这个目标。

相关内容

  • 没有找到相关文章

最新更新