Как рассчитать ms с полуночи в Javascript

Каков наилучший способ рассчитать время, прошедшее с (последней) полуночи в ms?

Ответы

Ответ 1

Создайте новую дату, используя текущий день/месяц/год, и получите разницу.

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

Ответ 2

Куча ответов, так что вот еще:

var d = new Date(), e = new Date(d);
var msSinceMidnight = e - d.setHours(0,0,0,0);

Как функция:

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

alert(getMsSinceMidnight(new Date()));

Ответ 3

Многие ответы, кроме RobG (рекомендуемый ответ), Kolink и Lai's здесь не так.

Посмотрите ближе.


Первая ошибка

OptimusCrime и Andrew D. ответы:

Как Mala sugested, если коррекция дневного света была применена в ближайшую полночь, мы получаем неправильное значение. Пусть отладка:

  • Предположим, это последнее воскресенье марта.
  • Время фиксируется в 2 часа ночи.
  • Если мы увидим 10 часов утра, на самом деле прошло 11 часов с полуночи.
  • Но вместо этого мы считаем 10 * 60 * 60 * 1000 ms
  • Трюк воспроизводится, когда полночь происходит в другом состоянии DST, а затем текущем

Вторая ошибка

ответ kennebeck:

Как писал RobG, часы могут галочь, если вы получите системное время дважды. Иногда мы можем появляться в разные даты. Вы можете воспроизвести это в цикле:

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

В-третьих, это моя личная ошибка, которую вы могли бы испытать

Рассмотрим следующий код:

var d = new Date(),
    msSinceMidnight = d - d.setHours(0,0,0,0);

msSinceMidnight всегда 0, поскольку объект изменяется во время вычисления до операции подстановки


Наконец, этот код работает:

var d = new Date(),
    msSinceMidnight = d.getTime() - d.setHours(0,0,0,0);

Ответ 4

Проще писать, если вы не возражаете создать две даты.

var msSinceMidnight= new Date()-new Date().setHours(0,0,0,0);

Ответ 5

var d=new Date();
// offset from midnight in Greenwich timezone
var msFromMidnightInGMT=d%86400000;
// offset from midnight in locale timezone
var msFromMidnightLocale=(d.getTime()-d.getTimezoneOffset()*60000)%86400000;

Ответ 6

var today = new Date();
var d = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0); 

var difference = today.getTime() - d.getTime();

Ответ 7

Секунды с полуночи просто будут отображать время, но вместо использования часов: минут: секунд все преобразуется в секунды.

Я думаю, что это должно сделать это:

var now = new Date();    
var hours = now.getHours()*(60*60);
var minutes = now.getMinutes()*60;
var seconds = now.getSeconds();

var secSinceMidnight = hours+minutes+seconds;