我有一个问题,找不到解决方案。我有一个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
术语";本地";这里的意思是基于主机时区设置,可以根据区域设置(即地理位置)或其他策略(例如用户或管理员将其设置为的任何策略)进行设置。