记住DST,Leaps,Timezones。
这个功能可以搞砸了吗?它必须采用unix纪元(GMT)并找出该纪元的确切日历日,并在当天中午12:00返回纪元。
function convertToDayStartTime(epoch) {
var d = new Date(0);
d.setUTCSeconds(epoch);
var dayStart = new Date(d.toDateString()).getTime()/1000;
return dayStart;
}
例如:
expect(convertToDayStartTime(1378000800)).toEqual(1377993600);
编辑:
看起来有点搞砸了。测试失败后:
expect(convertToDayStartTime(1377993599)).toEqual(1377907200);
我不确定如何修复。
答案 0 :(得分:3)
我认为它与浏览器Date
的实现完全一样正确。但是,我认为你可以简化它:你知道一天有多长 - 86400秒。所以只需找到86400的最接近的倍数即可。你可以像这样实现它:
function convertToDayStartTime(epoch) {
return Math.floor(epoch / 86400) * 86400;
}
正如预期的那样,为您的示例提供了1377907200.