Как рассчитать миллисекунды с начала дня?

Я указал конкретное время в определенный день. Теперь я хочу рассчитать миллисекунды с начала этого конкретного дня до установленного времени этого дня? Я надеялся сделать это с помощью приведенного ниже кода, но вместо этого он ничего не показывает? Что я делаю не так?

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01").getTime();
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0); 
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

var div = document.getElementById('result'); 
div.innerText = countDownTime;

Я указываю countDownDate. Затем я отмечаю начало этого countDownDate в переменной countDownStart. Затем я вычисляю время, прошедшее с 00:00 10 января до 00:01 10 января, вычитая countDownStart из countDownDate. Но результата не видно...


person jiggy1965    schedule 06.01.2018    source источник
comment
Вы можете использовать библиотеку моментов. Это будет полезно   -  person zabusa    schedule 06.01.2018
comment
@ 31piy иногда легко понять момент. Делая столько всего.   -  person zabusa    schedule 06.01.2018
comment
@ 31piy В настоящее время существует множество сборщиков и методов для уменьшения размера пакета, если ему нужно загрузить библиотеку, которую он также лениво загружает. Так что это зависит   -  person zabusa    schedule 06.01.2018
comment
@ 31piy ohk ... но также есть много способов решить эту проблему, например, zip, ленивая загрузка и т. Д. Так что следует позаботиться о читабельности.   -  person zabusa    schedule 06.01.2018
comment
Пожалуйста, не используйте встроенный синтаксический анализатор, см. Почему Date .parse дает неверные результаты?. Вместо new Date("January 10, 2018 00:01") используйте new Date(2018, 0, 10, 0, 1), который не только более надежен, но и менее трудоемок. ;-) Кроме того, не все дни длятся 24 часа, когда наблюдается переход на летнее время (некоторые длиннее, некоторые короче).   -  person RobG    schedule 07.01.2018


Ответы (2)


Ваша логика здесь хороша. Единственная проблема заключается в этой строке здесь:

var countDownDate = new Date("January 10, 2018 00:01").getTime();

Поскольку вы использовали .getTime(), переменная countDownDate больше не является датой. Таким образом, в следующем оператореcountDownDate.getFullYear() и вперед это не сработает. Просто удалите .getTime() и все заработает как положено:

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01");
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0); 
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

console.log(countDownTime)

person Spencer Wieczorek    schedule 06.01.2018
comment
Нет необходимости в getTime вообще, разница может быть всего countDownDate - countDownStart. ;-) - person RobG; 07.01.2018

В вашем коде есть только одна проблема: вы присвоили результат .getTime() countDownDate, который будет числом.

Вот почему JavaScript не может вызывать getFullYear или любую другую функцию по этому номеру, потому что это будут недопустимые вызовы.

Чтобы исправить это, просто удалите .getTime(), и все будет работать нормально.

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01");
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0);
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

var div = document.getElementById('result');
div.innerText = countDownTime;
<div id="result">
  <div>

person 31piy    schedule 06.01.2018
comment
Похоже, ты опередил меня на несколько секунд :) - person Spencer Wieczorek; 06.01.2018