在ExtJS中禁用时区转换

时间:2015-08-28 09:09:45

标签: javascript date extjs extjs4.2

呈现JavaScript / ExtJS Date对象时,日期始终相对于浏览器。

例如,时间戳4102338600000将呈现为' Thu Dec 31 2099 00:00:00 GMT+0530 (India Standard Time)'使用IST划分浏览器,将在EST分区浏览器中减少一天。

我从网上的文章中尝试了几种方法,例如抵消时区等,但没有看到直截了当的选择。

我们的申请需要统一日期,比如GMT / UTC /其他格式,不论时区如何。

在应用代码中,100个以上的地方,以下用于呈现日期:

format : 'd-M-Y',

有没有什么可以做同样的事情,但使用UTC代替本地转换?

2 个答案:

答案 0 :(得分:1)

使用toUTCString

var date = new Date(4102338600000);
console.log(date.toUTCString());
"Wed, 30 Dec 2099 18:30:00 GMT"

<强>更新

确实,

Ext.Date.format会返回本地日期字符串表示。似乎没有开箱即用的方式让它返回UTC日期。你可以这样欺骗它:

var ms2UTCDate = function(ms) {
    var date = new Date(ms);
    return new Date(date.valueOf() + 60000 * date.getTimezoneOffset());
}
console.log(Ext.Date.format(ms2UTCDate(4102338600000), 'Y-m-d'));
2099-12-30

该技巧可以按如下方式刻录到Ext.Date.format中(除非您确定不需要原始行为,否则不要这样做!):

var originalExtDateFormat = Ext.Date.format;
Ext.Date.format = function(date, format) {
    if (date instanceof Date) {
        date = new Date(date.valueOf() + 60000 * date.getTimezoneOffset());
    }
    return originalExtDateFormat.call(this, date, format);
}

答案 1 :(得分:1)

可能你可以在下面做:

  1. 将时间戳与时区详细信息一起发送到服务器。
  2. 在服务器端,根据时区,获取要保存的UTC日期。
  3. 在检索时,按照请求的参数发送时区,并相应地获取日期。
  4. 有点冗长,但应该有效: - )