正在转换Javascript日期getTime()



我有一个问题,找不到解决方案。我有一个MVC项目,我只在区域设置日期(保加利亚时间GMT+2)中工作。我以秒为单位传输日期,然后在我的javascript代码中以秒进行翻译。然后我想再翻译一遍,但我少了3个小时。

var date = new Date(1970,0,1);  
date.setSeconds(1476086900); //    10.10.2016 8:20 a.m

然后,当我用getTime(函数)将其转移并将其除以1000以再次获得秒时,我得到的时间最多减少了10k秒->凌晨5点。

var apprSeconds =  date.getTime() / 1000 ;

approxSeconds是1476076100。

问题是我得到了不同的值:

14760869001476076100

谢谢你的帮助。

代码并没有按照您的想法执行。当你这样做:

var date = new Date(1970,0,1);  
date.setSeconds(1476086900);

将在主机系统的本地时区UTC+02:00为1970年1月1日创建日期。添加秒设置本地秒,因此您仍然是UTC+02:00。

但是,内部时间值是UTC,所以当您这样做时:

date.getTime() / 1000

你得到UTC秒。由于您将初始值视为本地值,因此需要考虑时区偏移:

date.getTime() / 1000 - date.getTimezoneOffset() * 60;

它应该以秒为单位提供原始值。请注意,时区偏移以分钟表示,格林威治以东的时区为-ve,以西的时区为+ve(即与典型意义相反)。

var seconds = 1476086900;
var date = new Date(1970,0,1);
date.setSeconds(seconds);
// Date in host timezone
console.log('date:  ' + date.toString());
// Date UTC time value
console.log('UTC time value in seconds: ' + date/1000)
// returns original seconds value
console.log('Time value in seconds adjusted for host timezone: ' +
(date / 1000 - date.getTimezoneOffset() * 60));

这表明两个时间值之间的差异是时区偏移。

PS

术语";本地";这里的意思是基于主机时区设置,可以根据区域设置(即地理位置)或其他策略(例如用户或管理员将其设置为的任何策略)进行设置。

最新更新