Додайте 10 секунд до побачення


253

Як я можу додати 10 секунд до об’єкта дати JavaScript?

Щось на зразок цього:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;

4
Або якщо ви хочете зробити це через конструктор - нова дата (нова дата (). GetTime () + 10000)
Джон Стріклер

Відповіді:


417

Існує також setSecondsметод:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

Для переліку інших Date функцій слід ознайомитися з MDN


setSeconds буде правильно обробляти обертові випадки:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05


3
Остерігайтеся, моя установка Nodejs повертає d.getSeconds () у вигляді рядка. Мені довелося змінити це на (+ d.getSeconds ()) Унарний плюс перетворить рядок у число. Можливо, трохи більш очевидним було б 1 * d.getSeconds ()
tqwhite

1
@tqwhite, typeof new Date().getSeconds()повертається 'number'у вузол, тому, я думаю, у вас можуть виникнути інші проблеми (якщо ви не маєте застарілу версію вузла чи щось таке).
zzzzBov

2
Спробуйте це зробити, d.setSeconds(d.getSeconds() - 92);і ви отримаєте різницю 2'32 "замість 1'32". Однак рішення з new Date(d.getTime() - 92*1000);роботи працює!
Рафалон

1
Покладатися на незадокументовану поведінку (що setSeconds (70) збільшуватиметься хвилин на одну і встановлювати секунди до 10), здається, як правило, поганою практикою. Відповіді (на даний момент наступні), що вказують на Date.getTime () + <кількість мілісекунд, які потрібно додати>, здається, призначений і підтримуваний підхід, і буде зрозумілий для більшості програмістів, які приходять з різних мов, без енциклопедичного знання про недокументовані нюанси кожного зокрема двигун JavaScript.
Том Діббл

1
Проблема може виникнути з історичними часовими поясами, дивіться коментарі під відповіддю @ Рона: stackoverflow.com/a/17267937/198797 . Можливо, це не звичайний сценарій, але все-таки проблема.
цемер

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... а причина, яку ви додали 10000, полягає в тому, що дати Javascript працюють в мілісекундах, тобто 10000 = 10 * 1000
psiphi75

1
І + до timeObject потрібен, тому що він передає timeObject до числа. Тож це як timeObject.getTime () у відповіді Рона
Джеймс

1
JavaScript такий неприємний. Ці ранні API трохи підкручені.
usr

63

Просто для маніаків виступу серед нас.

getTime

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5,196,949 Оп / сек, найшвидший


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2,936,604 Оп / сек, на 43% повільніше


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22,549 Оп / с, на 100% повільніше


Тож, можливо, це найменш читабельний для людини (не такий вже й поганий), але найшвидший шлях :)

онлайн-тести jspref


3
Дякую за деталі, дуже корисно :)
Декан

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Також зверніть увагу: Як додати 30 хвилин до об’єкта дати JavaScript?


7
з усіх неправильних відповідей тут, це правильний.
Cory Mawhorter

Так, це правильна відповідь. На жаль, Google посилається на це запитання, якщо шукає "дату javascript додати секунди", і відповідь, якою найбільше проголосували, невірна.
Philipp Gächter

2
Чи може хто-небудь пояснити, що обрана відповідь (наразі від @zzzzBov) робить неправильно? Це працює для мене.
цемер

1
@tsemer, на перший погляд, я подумав, що відповідь zzzzBov невірна, тому що я не думав, що оновить значення хвилини, якщо воно буде поза діапазоном. Але через ваші "складні", я переглянув MDN і підтвердив, що відповідь, безумовно, правильна. :)
Рон

1
@tsemer Спробуйте у веб-браузері з підтримкою історичних TimeZones (наприклад, Internet Explorer 11): також встановіть систему TimeZone на "Азія / Єкатеринбург":var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k



3

У мене є пара нових варіантів

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);

2

Date()Об'єкт в JavaScript НЕ то, що розумний дуже.

Якщо ви зосереджуєтеся лише на додаванні секунд, то, здається, виправляєтесь справи безперебійно, але якщо ви намагаєтеся додати X кількість секунд, тоді до того ж Dateоб’єкту ви додасте число Х хвилини та години тощо, ви потрапляєте у біду. Тож я просто перейшов до лише використання setSeconds()методу і перетворення своїх даних за секунди (що спрацювало чудово).

Якщо хтось може продемонструвати додавання часу до глобального Date()об'єкта, використовуючи всі встановлені методи, і остаточний час вийде правильно, я б хотів його побачити, але я розумію, що один метод набору потрібно використовувати одночасно для певного Date()об'єкта і їх змішування призводить до безладу.

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

Ось ще декілька документів, які можуть допомогти :


2
  1. ви можете використовувати setSecondsметод, отримуючи секунди від сьогодні і просто додаючи в нього 10 секунд

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Ви можете додати 10 * 1000 мілісекунд до нової дати:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Ви можете використовувати setTime:

    today.setTime(now.getTime() + 10000)

1

Спробуйте таким чином.

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

Просто зателефонуйте та призначте new Date().addSeconds(10)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.