我知道Date对象正在使用机器时区(代码运行的地方)。我有一个特定的用例,我需要清除偏移量。
var d = new Date();
console.log(d.getTimezoneOffset())
这将打印UTC的偏移量。 我想强制偏移为零,我做了这个
var getTimezoneOffset = Date.prototype.getTimezoneOffset;
Date.prototype.getTimezoneOffset = function removeTimezoneOffset() {
return 0;
};
我在做了一些事后重置了
Date.prototype.getTimezoneOffset = getTimezoneOffset
这将在抱怨Date prototype is read only, properties should not be added
中失败。
有没有更好的方法来消除时间偏移?
答案 0 :(得分:1)
我觉得您正在使用其他使用 getTimezoneOffset 的代码而不是修改该代码,而您正在更改该方法。
在不知道具体问题的情况下,您还可以通过本地时区偏移修改日期,以便“本地”方法返回UTC值:
function formatAsISO(d){
function z(n){return (n<10?'0':'')+n}
return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' +
z(d.getDate()) + ' ' + z(d.getHours()) + ':' +
z(d.getMinutes()) + ':' + z(d.getSeconds());
}
var d = new Date();
// Local date
console.log('Local : ' + formatAsISO(d));
// UTC equivalent
console.log('UTC : ' + d.toISOString());
// Adjust so local looks like UTC
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
console.log('Adjusted: ' + formatAsISO(d));
修改实际日期,因此您可能需要将其副本传递给(未指定)函数。
答案 1 :(得分:0)
你可能想要date.toISOString()
,或以其他方式检查这个问题; How do you convert a JavaScript date to UTC?