如何在Javascript中从午夜开始计算ms

Olg*_*lga 21 javascript time

计算从ms(午夜)到午夜过去的时间的最佳方法是什么?

Rob*_*obG 33

一堆答案,所以这里另一个:

var d = new Date(), e = new Date(d);
var msSinceMidnight = e - d.setHours(0,0,0,0);
Run Code Online (Sandbox Code Playgroud)

作为一个功能:

function getMsSinceMidnight(d) {
  var e = new Date(d);
  return d - e.setHours(0,0,0,0);
}

alert(getMsSinceMidnight(new Date()));
Run Code Online (Sandbox Code Playgroud)

  • 这个不错。它正确处理夏令时。 (2认同)

Nie*_*sol 29

使用当前日/月/年创建新日期,并获得差异.

var now = new Date(),
    then = new Date(
        now.getFullYear(),
        now.getMonth(),
        now.getDate(),
        0,0,0),
    diff = now.getTime() - then.getTime(); // difference in milliseconds
Run Code Online (Sandbox Code Playgroud)

  • 通过复制日期对象并将时间设置为00:00:00,您可以更轻松地完成此操作.如果创建两个日期之间的时钟滴答,您的答案可能是错误的. (2认同)

Dan*_*Dan 9

除了RobG(推荐答案),KolinkLai之外许多答案在这里都是错误的

让我们仔细观察吧


第一个错误

OptimusCrimeAndrew D.回答:

由于麻辣过度,如果在最近的午夜应用夏令时修正,我们会得到不正确的值.我们调试一下:

  1. 假设它是三月的最后一个星期天
  2. 时间固定在凌晨2点.
  3. 如果我们在时钟上午10点看到,那么从午夜开始实际上是11个小时
  4. 但相反,我们数10 * 60 * 60 * 1000ms
  5. 当午夜发生在不同的DST状态然后是当前时,该技巧被播放

第二个错误

肯尼贝克的回答:

正如RobG写的那样,如果你得到两次系统时间,时钟可以打勾.我们甚至有时会出现在不同的日期.你可以循环重现这个:

for (var i = 0; true; i++) {
    if ((new Date()).getTime() - (new Date()).getTime()) {
        alert(i); // console.log(i);  // for me it's about a 1000
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

第三是你可能遇到的个人陷阱

请考虑以下代码:

var d = new Date(),
    msSinceMidnight = d - d.setHours(0,0,0,0);
Run Code Online (Sandbox Code Playgroud)

msSinceMidnight总是0在减法操作之前计算期间改变对象


最后,这段代码有效:

var d = new Date(),
    msSinceMidnight = d.getTime() - d.setHours(0,0,0,0);
Run Code Online (Sandbox Code Playgroud)


ken*_*bec 6

如果您不介意创建两个日期,则编写起来更简单。

var msSinceMidnight= new Date()-new Date().setHours(0,0,0,0);
Run Code Online (Sandbox Code Playgroud)