我有一个问题,我找不到解决方案。我有一个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 ;
apprSeconds是1476076100。
问题是我得到了不同的价值观:
1476086900 1476076100
感谢您的帮助。
答案 0 :(得分:0)
代码没有按照你的想法行事。当你这样做时:
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));
这表明两个时间值之间的差异是时区偏移。
这里的术语“本地”表示基于主机时区设置,可以根据区域设置(即地理位置)或某些其他策略(例如用户或管理员设置的任何策略)设置。