Как рассчитать 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;