Добавьте 10 секунд к дате

253

Как я могу добавить 10 секунд к объекту даты JavaScript?

Что-то вроде этого:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
Джордж
источник
4
Или, если вы хотите сделать это через конструктор - new Date (new Date (). GetTime () + 10000)
John Strickler

Ответы:

416

Также есть 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

zzzzBov
источник
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);
4esn0k
источник
33
... и причина, по которой вы добавили 10000, состоит в том, что даты Javascript работают в миллисекундах, то есть 10000 = 10 * 1000
psiphi75
1
И + before timeObject необходим, потому что он преобразует timeObject в число. Так что это как timeObject.getTime () в ответе Рона
Джеймс
1
JavaScript такой противный Эти ранние API немного испорчены.
USR
62

Только для маньяков производительности среди нас.

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);

2936604 операций в секунду, на 43% медленнее


moment.js

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

22 549 операций в секунду, на 100% медленнее


Так что, возможно, это наименее понятный для человека (не так уж плох), но самый быстрый способ пойти :)

jspref онлайн тесты

Danpe
источник
3
Спасибо за подробности, очень полезно :)
декан
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Также, пожалуйста, обратитесь: Как добавить 30 минут к объекту JavaScript Date?

Рон
источник
7
из всех неправильных ответов здесь, это правильный.
Кори Моухортер
Да, это правильный ответ. К сожалению, Google ссылается на этот вопрос, если ищет «javascript date add секунды» и ответ с наибольшим количеством голосов является неправильным.
Филипп Гехтер
2
Кто-нибудь может объяснить, что выбранный ответ (в настоящее время из @zzzzBov) делает неправильно? Меня устраивает.
Цемер
1
@tsemer, на первый взгляд, я думал, что ответ zzzzBov неправильный, потому что я не думал, что он обновит минутное значение, если оно выходит за пределы диапазона. Но из-за твоего «оспаривания» я просмотрел MDN и подтвердил, что ответ определенно правильный. :)
Рон
1
@tsemer Попробуйте в веб-браузере с поддержкой исторических часовых поясов (например, 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
9

Попробуй это

a = new Date();
a.setSeconds(a.getSeconds() + 10);
lostyzd
источник
4
timeObject.setSeconds(timeObject.getSeconds() + 10)
Томаш Нуркевич
источник
4

У меня есть пара новых вариантов

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);
1nstinct
источник
2

Date()Объект в JavaScript не то, что умный очень.

Если вы просто сосредотачиваетесь на добавлении секунд, кажется, что все идет гладко, но если вы попытаетесь добавить X количество секунд, то добавьте X количество минут и часов и т. Д. К тому же Dateобъекту, который вы попали в беду. Поэтому я просто использовал только setSeconds()метод и конвертировал свои данные в секунды (что работало нормально).

Если кто-то может продемонстрировать добавление времени к глобальному Date()объекту, используя все методы набора, и получить правильное окончательное время, я хотел бы видеть это, но у меня есть ощущение, что один метод набора должен использоваться за один раз для данного Date()объекта и смешивание их приводит к беспорядку.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Вот еще немного документации, которая может помочь :

coding_is_fun
источник
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)

Икрам - Уд - Даула
источник