На самом деле код работает, как и должно быть, возможно, вы просто упускаете какую-то концепцию.
new Date()
- это конструктор, который возвращает экземпляр Date
объекта.
Этот объектимеют несколько свойств.Когда вы создаете его, он возвращает что-то вроде Sun Sep 22 2019 01:21:14 GMT+0200 (CEST)
, которое является строковым представлением текущего времени.
Однако это строковое представление не так, как JS на самом деле «думает» о времени.
Внутренне, «время» для JS - это количество миллисекунд, прошедших с 1 января 1970 года, 00: 00: 00.
Это выглядит примерно так: 1569108461979
.
Вы можете увидеть это, есливы запускаете Date.now();
Кроме того, если вы выполняете какие-либо вычисления (не напрямую, а с использованием таких методов, как .setDate
) с new Date()
, он будет внутренне вычислен как миллисекунды, полученные с 1, 1970, 00:00: 00.
Итак, основная проблема в вашем коде состоит в том, что ваша переменная duration
на самом деле не является "продолжительностью".
Она просто содержит объект, представляющий 21 сентября 2019 00: 03: 32.
Это всего лишь момент во времени (3 минуты 32 секунды после полуночи 20 сентября 2019 года).
Чтобы рассчитать, когда песня закончится, если она начнется правильноТеперь вы бы сделали что-то вроде:
let now = Date.now();
// Song duration in milliseconds
let songDuration = 201000;
let songEndTime = now + songDuration;
console.log( new Date(songEndTime) );