8

我想计算出从一天开始的时间,以毫秒为单位。

所以说我得到了这个:1340323100024,就像 2012 年 6 月 21 日的中午。现在我想要从一天开始的毫秒数,这将是 1340262000000 (至少我认为这是应该的。)

我如何从 1340323100024 获得 1340262000000?

我试着做

Math.floor(1340323100024/86400000) * 86400000 

但这给了我 1340236800000,如果我从中创建一个日期对象,则表示它是 20 号。

我知道我可以从 1340323100024 创建一个日期对象,然后获取月、年和日期,以创建一个新对象,它会给我 1340262000000,但我觉得这很荒谬,我无法弄清楚这么简单的事情。

任何帮助,将不胜感激。

顺便说一句,如果有任何区别,我会在 javascript 中执行此操作。

4

3 回答 3

9

我同意 Thilo(本地化到时区),但我可能会这样处理:

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
// Result:    Wed Jun 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)

或者,如果您愿意:

Number.prototype.StartOfDayMilliseconds = function(){
  return this - (this % (86400 * 1000));
}

var ms = 1340323100024;
alert(ms.StartOfDayMilliseconds());

编辑

如果您特别关注时区,可以使用:

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
    beginning += ((new Date).getTimezoneOffset() * 60 * 1000);
// Result:    Thu Jun 21 2012 00:00:00 GMT-0400 (Eastern Daylight Time)

请注意,现在删除了偏移量,因此前一天晚上 8 点变成时间戳上实际日期的午夜。您也可以(取决于实现)在您对一天开始的取模之前或之后进行加法 - 您的偏好。

于 2012-06-22T02:57:10.300 回答
2
var d = new Date();
var date = d.toISOString().split("T")[0];
var date_ms = new Date(date).getTime();

或一行答案

console.log(new Date(new Date().toISOString().split("T")[0]).getTime());
于 2020-05-13T10:41:28.953 回答
-3

实际上,应该是(currTimeMilli - 18000000) % 864000000获取 GMT+5 从一天开始的毫秒数。

于 2016-09-06T16:01:34.457 回答