Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向javascript日期添加或减去时区差_Javascript_Date - Fatal编程技术网

向javascript日期添加或减去时区差

向javascript日期添加或减去时区差,javascript,date,Javascript,Date,向下面的targetTime变量添加或减去时区差异的最佳方法是什么。GMT时区值以以下格式来自DB:1.00(伦敦时间)和-8.00(太平洋时间)等 代码如下所示: date = "September 21, 2011 00:00:00"; targetTime = new Date(date); 您可以使用Date.getTimezoneOffset,它以分钟为单位返回GMT的本地偏移量。请注意,它返回的值与您可能期望的符号相反。所以GMT-5是300,GMT+1是-60 var date

向下面的
targetTime
变量添加或减去时区差异的最佳方法是什么。GMT时区值以以下格式来自DB:
1.00(伦敦时间)和
-8.00(太平洋时间)等

代码如下所示:

date = "September 21, 2011 00:00:00";
targetTime = new Date(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
}

如果您需要补偿时区,我建议您使用以下代码段:

var dt = new Date('2018-07-05')
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset())
console.log(dt)

这是正确的,但如果您所在的国家是夏令时,而现在如果您的GMT是+2,那么夏令时账户的GetTimeZoneOffset现在将是+1getTimezoneOffset。我在美国东部时区,通常是GMT-5,但夏令时是GMT-4。如果我现在在浏览器中调用getTimezoneOffset,我会得到240,也就是GMT-4。当然,这只适用于当地时间的夏令时。对于后端的DST,应该调整DB的时区偏移量。这对我很有效。但是在第三行
date.setTime(date.getTime()+timeoffsetims)上有一些小的变化添加
+
而不是
-
卓越解决方案Brazuca!:D