转换Javascript日期getTime()

时间:2017-01-18 07:31:22

标签: javascript asp.net-mvc date

我有一个问题,我找不到解决方案。我有一个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

感谢您的帮助。

1 个答案:

答案 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));

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

PS

这里的术语“本地”表示基于主机时区设置,可以根据区域设置(即地理位置)或某些其他策略(例如用户或管理员设置的任何策略)设置。