为整个脚本全局设置时区偏移量

4

您好,我正在使用getTimezoneOffset,它返回例如-60

如何为JavaScript设置全局时区偏移量? 我尝试了setTimezoneOffset('-120');,但它没有起作用。 我想在脚本开始时全局设置它,以便稍后我可以简单地调用 var d = new Date(); var n = d.getTimezoneOffset();并返回我的值。 请提供此情况的解决方案。 谢谢!


1
使用UTC日期方法而不是本地日期方法,并在需要时减去偏移量。 - Oriol
2
基本上 Date.prototype.getTimezoneOffset = function () {return -120;}; 可以满足你的需求(仅适用于你的情况),但是这样做有什么意义呢?为什么不使用常规变量呢? - Teemu
3
JavaScript没有内置用于指定时区的选项。 Date仅理解2个——UTC / GMT和“本地时间”。后者由用户的系统确定。 - Jonathan Lonowski
1
谢谢大家!特别是 Teemu - 它有效了! :) 有时我需要所有用户具有相同的时区偏移量。 - peter
2个回答

3
Date.prototype.getTimezoneOffset = function () {return -120;};

3
然而,new Date 实例似乎没有考虑到这一点。 - ՕլՁՅԿ
1
`Date.prototype.getTimezoneOffset = function () {return -520}; hours1 = new Date().getHours();Date.prototype.getTimezoneOffset = function () {return -120}; hours2 = new Date().getHours();hours1 === hours2 // true` - Maxmaxmaximus

2

使用:

// TO ALL dates
Date.timezoneOffset(-240) // +4 UTC

// Override offset only for THIS date
new Date().timezoneOffset(-180) // +3 UTC

代码:

Date.prototype.timezoneOffset = new Date().getTimezoneOffset();

Date.setTimezoneOffset = function(timezoneOffset) {
  return this.prototype.timezoneOffset = timezoneOffset;
};

Date.getTimezoneOffset = function(timezoneOffset) {
  return this.prototype.timezoneOffset;
};

Date.prototype.setTimezoneOffset = function(timezoneOffset) {
  return this.timezoneOffset = timezoneOffset;
};

Date.prototype.getTimezoneOffset = function() {
  return this.timezoneOffset;
};

Date.prototype.toString = function() {
  var offsetDate, offsetTime;
  offsetTime = this.timezoneOffset * 60 * 1000;
  offsetDate = new Date(this.getTime() - offsetTime);
  return offsetDate.toUTCString();
};

['Milliseconds', 'Seconds', 'Minutes', 'Hours', 'Date', 'Month', 'FullYear', 'Year', 'Day'].forEach((function(_this) {
  return function(key) {
    Date.prototype["get" + key] = function() {
      var offsetDate, offsetTime;
      offsetTime = this.timezoneOffset * 60 * 1000;
      offsetDate = new Date(this.getTime() - offsetTime);
      return offsetDate["getUTC" + key]();
    };
    return Date.prototype["set" + key] = function(value) {
      var offsetDate, offsetTime, time;
      offsetTime = this.timezoneOffset * 60 * 1000;
      offsetDate = new Date(this.getTime() - offsetTime);
      offsetDate["setUTC" + key](value);
      time = offsetDate.getTime() + offsetTime;
      this.setTime(time);
      return time;
    };
  };
})(this));

咖啡版本:

Date.prototype.timezoneOffset = new Date().getTimezoneOffset()


Date.setTimezoneOffset = (timezoneOffset)->
    return @prototype.timezoneOffset = timezoneOffset


Date.getTimezoneOffset = (timezoneOffset)->
    return @prototype.timezoneOffset


Date.prototype.setTimezoneOffset = (timezoneOffset)->
    return @timezoneOffset = timezoneOffset


Date.prototype.getTimezoneOffset = ->
    return @timezoneOffset


Date.prototype.toString = ->
    offsetTime = @timezoneOffset * 60 * 1000
    offsetDate = new Date(@getTime() - offsetTime)
    return offsetDate.toUTCString()


[
    'Milliseconds', 'Seconds', 'Minutes', 'Hours',
    'Date', 'Month', 'FullYear', 'Year', 'Day'
]
.forEach (key)=>
    Date.prototype["get#{key}"] = ->
        offsetTime = @timezoneOffset * 60 * 1000
        offsetDate = new Date(@getTime() - offsetTime)
        return offsetDate["getUTC#{key}"]()

    Date.prototype["set#{key}"] = (value)->
        offsetTime = @timezoneOffset * 60 * 1000
        offsetDate = new Date(@getTime() - offsetTime)
        offsetDate["setUTC#{key}"](value)
        time = offsetDate.getTime() + offsetTime
        @setTime(time)
        return time

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接