Как добавить 30 минут к объекту JavaScript Date?

В Windows я создал файл git.bat и связал его с расширением .hook.

if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""

После этого вы можете запускать файлы .hook, такие как каждый .bat или .cmd-файл, кроме что они работают под оболочкой git ...

683
задан Eric Leschinski 29 January 2015 в 22:58
поделиться

6 ответов

var d1 = new Date (),
    d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 30 );
alert ( d2 );
214
ответ дан 22 November 2019 в 21:33
поделиться

 var oldDateObj = новая дата (); var newDateObj = новая дата (); newDateObj.setTime (oldDateObj.getTime () + (30 * 60 * 1000)); console.log (newDateObj); 
146
ответ дан 22 November 2019 в 21:33
поделиться

Может быть, что-то вроде этого?

 var d = new Date (); var v = новая дата (); v.setMinutes (d.getMinutes () + 30); console.log (v) 
42
ответ дан 22 November 2019 в 21:33
поделиться

Использование библиотеки

Если вы много работаете с датами, вы можете изучить библиотеки дат JavaScript, например Datejs или Moment.js . Например, для Moment.js это просто:

var newDateObj = moment(oldDateObj).add(30, 'm').toDate();

Vanilla Javascript

Это похоже на ответ хаоса , но в одной строке:

var newDateObj = new Date(oldDateObj.getTime() + diff*60000);

Где diff - это разница в минутах, которую вы хотите, от времени oldDateObj . Оно может быть даже отрицательным.

Или как функция многократного использования, если вам нужно сделать это в нескольких местах:

function addMinutes(date, minutes) {
    return new Date(date.getTime() + minutes*60000);
}

И на всякий случай это неочевидно, почему мы умножаем минуты на 60000 переводит минуты в миллисекунды.

Будьте осторожны с ванильным Javascript. Свидания - это сложно!

Вы можете подумать, что можете добавить к дате 24 часа, чтобы получить свидание завтра, право? Неверно!

addMinutes(myDate, 60*24); //DO NOT DO THIS

Оказывается, если пользователь соблюдает летнее время, день не обязательно длится 24 часа. Один день в году длится всего 23 часа, а один день в году длится 25 часов. Например, в большинстве Соединенных Штатов и Канады через 24 часа после полуночи 2 ноября 2014 года все еще остается 2 ноября:

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

Вот почему использование одной из вышеупомянутых библиотек является более безопасным вариантом , если вам нужно проделать с этим много работы.

Ниже представлена ​​более общая версия этой функции, которую я написал. Я все равно рекомендую использовать библиотеку, но это может быть излишним / невозможным для вашего проекта. Синтаксис моделируется на основе функции MySQL DATE_ADD .

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Рабочая демонстрация jsFiddle .

Один день в году длится всего 23 часа, а один день в году длится 25 часов. Например, в большинстве Соединенных Штатов и Канады через 24 часа после полуночи 2 ноября 2014 г. все еще остается 2 ноября:

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

Вот почему использование одной из вышеупомянутых библиотек является более безопасным вариантом , если вам нужно проделать с этим много работы.

Ниже представлена ​​более общая версия этой функции, которую я написал. Я по-прежнему рекомендую использовать библиотеку, но это может быть излишним / невозможным для вашего проекта. Синтаксис моделируется на основе функции MySQL DATE_ADD .

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Рабочая демонстрация jsFiddle .

Один день в году длится всего 23 часа, а один день в году длится 25 часов. Например, в большинстве Соединенных Штатов и Канады через 24 часа после полуночи 2 ноября 2014 года все еще остается 2 ноября:

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

Вот почему использование одной из вышеупомянутых библиотек является более безопасным вариантом , если вам нужно проделать с этим много работы.

Ниже представлена ​​более общая версия этой функции, которую я написал. Я по-прежнему рекомендую использовать библиотеку, но это может быть излишним / невозможным для вашего проекта. Синтаксис моделируется на основе функции MySQL DATE_ADD .

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Рабочая демонстрация jsFiddle .

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

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

Ниже представлена ​​более общая версия этой функции, которую я написал. Я все равно рекомендую использовать библиотеку, но это может быть излишним / невозможным для вашего проекта. Синтаксис моделируется на основе функции MySQL DATE_ADD .

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Рабочая демонстрация jsFiddle .

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

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

Ниже представлена ​​более общая версия этой функции, которую я написал. Я все равно рекомендую использовать библиотеку, но это может быть излишним / невозможным для вашего проекта. Синтаксис моделируется на основе функции MySQL DATE_ADD .

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Рабочая демонстрация jsFiddle .

886
ответ дан 22 November 2019 в 21:33
поделиться

Еще один вариант, который я написал:

Библиотека DP_DateExtensions

Это излишне, если это вся обработка даты, которая вам нужна, но она будет делать то, что вы хотите.

Поддерживает форматирование даты / времени, математику даты (добавление / вычитание частей даты), сравнение даты, синтаксический анализ даты и т. Д. Он имеет открытый исходный код.

1
ответ дан 22 November 2019 в 21:33
поделиться

var now = new Date(); now.setMinutes(now.getMinutes() + 30); // временная метка now = new Date(now); // объект Date console.log(now);
98
ответ дан 22 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: