【发布时间】:2011-09-13 14:25:22
【问题描述】:
在下面的targetTime 变量中添加或减去时区差异的最佳方法是什么。 GMT 时区值来自数据库,格式如下:1.00 表示伦敦时间,-8.00 表示太平洋时间等等。
代码如下:
date = "September 21, 2011 00:00:00";
targetTime = new Date(date);
【问题讨论】:
标签: javascript date
在下面的targetTime 变量中添加或减去时区差异的最佳方法是什么。 GMT 时区值来自数据库,格式如下:1.00 表示伦敦时间,-8.00 表示太平洋时间等等。
代码如下:
date = "September 21, 2011 00:00:00";
targetTime = new Date(date);
【问题讨论】:
标签: javascript date
您可以使用 Date.getTimezoneOffset 以分钟为单位返回与 GMT 的本地偏移量。请注意,它返回的值与您可能期望的符号相反。所以 GMT-5 是 300,而 GMT+1 是 -60。
var date = "September 21, 2011 00:00:00";
var targetTime = new Date(date);
var timeZoneFromDB = -7.00; //time zone value from database
//get the timezone offset from local time in minutes
var tzDifference = timeZoneFromDB * 60 + targetTime.getTimezoneOffset();
//convert the offset to milliseconds, add to targetTime, and make a new Date
var offsetTime = new Date(targetTime.getTime() + tzDifference * 60 * 1000);
【讨论】:
对我有用的简单功能:
adjustForTimezone(date:Date):Date{
var timeOffsetInMS:number = date.getTimezoneOffset() * 60000;
date.setTime(date.getTime() + timeOffsetInMS);
return date
}
【讨论】:
date.setTime(date.getTime() + timeOffsetInMS); 添加+ 而不是-
如果您需要补偿时区,我会推荐以下 sn-p:
var dt = new Date('2018-07-05')
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset())
console.log(dt)
【讨论】:
new Date(dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset()))
这个例子展示了如何使用本地日期时间,但将其格式化为 ISO:
const d = new Date();
let dtOffset = new Date(d.setMinutes(d.getMinutes() - d.getTimezoneOffset()));
// Date in EST and ISO format: "2021-11-30T15:33:32.222Z"
console.log(dtOffset.toISOString());
【讨论】:
@alexp 答案的打字稿版本
adjustForTimezone(d:Date, offset:number):Date{
var date = d.toISOString();
var targetTime = new Date(date);
var timeZoneFromDB = offset; //time zone value from database
//get the timezone offset from local time in minutes
var tzDifference = timeZoneFromDB * 60 + targetTime.getTimezoneOffset();
//convert the offset to milliseconds, add to targetTime, and make a new Date
var offsetTime = new Date(targetTime.getTime() + tzDifference * 60 * 1000);
return offsetTime;
}
【讨论】: