Javascript date.setSeconds работает должным образом в отладчике, но не в сценарии - PullRequest
0 голосов
/ 16 января 2019

У меня есть функция, которая устанавливает cookie следующим образом:

function createCookieWithDuration(name, value, duration) {
    const date = new Date();
    console.log(`date now: ${date}`);
    date.setSeconds(date.getSeconds() + duration);
    console.log(`adjusted date by ${duration} seconds: ${date}`);
    document.cookie = `${name}=${value}; expires=${date}; path=/`;
}

Теперь, если я сделаю эту строку для строки в отладчике, она будет работать как положено: enter image description here

Но когда я запускаю скрипт и захожу в консоль, я добавляю 3 минуты и секунды:

enter image description here

Есть ли какая-то странная вещь, связанная с синхронизацией JavaScript, которая мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Используйте этот код, но убедитесь, что продолжительность указана в миллисекундах, поэтому, если вы хотите добавить 2 секунды, вам нужно пройти 2000, или, если вы проходите секунды, просто добавьте в код длительность * 1000.

function createCookieWithDuration(name, value, duration) {
    const date = new Date();
    console.log(`date now: ${date}`);
    const newDate = new Date(date.getTime() + duration);
    console.log(`adjusted date by ${duration}: ${newDate}`);
    document.cookie = `${name}=${value}; expires=${newDate}; path=/`;
}
0 голосов
/ 21 января 2019

Понятно setSeconds() относится к текущему времени. Вы можете использовать alert(), чтобы увидеть еще большие различия. Однако следующее будет работать так, как вы ожидаете: Заменить:

date.setSeconds(date.getSeconds() + duration);

С:

    date.setHours(date.getHours(), date.getMinutes(), date.getSeconds()+ duration, 0);

Обратите внимание, что я ноль миллисекунд, вы можете обрабатывать это, как вам нравится. см. рабочий пример jsfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...