Прибавить к дате день / месяц / год | JavaScript

Сложение дат

Чтобы прибавить к дате нужное количество дней

<input type="button" value="пример" onclick="dni()">

<script>
function dni() {
  var D = new Date(1999,11,31);
  D.setDate(D.getDate() + 3);
  alert(D);
}
</script>

Чтобы прибавить к дате нужное количество месяцев

<input type="button" value="пример" onclick="month()">

<script>
function month() {
  var D = new Date(1999,11,31);
  D.setMonth(D.getMonth() + 3);
  alert(D);
}
</script>

Чтобы прибавить к дате нужное количество лет

<input type="button" value="пример" onclick="year()">

<script>
function year() {
  var Dy = new Date(1999,11,31);
  Dy.setFullYear(Dy.getFullYear() + 3);
  alert(Dy);
}
</script>

Сложение лет, месяцев, дней

Август
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031
Сентябрь
ПнВтСрЧтПтСбВс
1234
567891011
12131415161718
19202122232425
2627282930

До 1 октября 33 дня или 1 месяц 3 дня (в сентябре 30 дней). Но скрипт считает что спустя 1 месяц 2 дня также наступит 1 октября.

var T = new Date(2016,7,29);
T.setDate(T.getDate() + 2); // 31 августа
T.setMonth(T.getMonth() + 1); // 1 октября

var T = new Date(2016,7,29);
T.setMonth(T.getMonth() + 1); // 29 сентября
T.setDate(T.getDate() + 2); // 1 октября

var T = new Date(2016,7,29);
T.setDate(T.getDate() + 3); // 1 сентября
T.setMonth(T.getMonth() + 1); // 1 октября

var T = new Date(2016,7,29);
T.setMonth(T.getMonth() + 1); // 29 сентября
T.setDate(T.getDate() + 3); // 2 октября

Поскольку вначале прибавляется месяц, а затем число, так делать нежелательно:

+ лет + месяцев + дней =
<input type="date" class="raz4"> + <input type="number" value="0" class="raz4"> лет + <input type="number" value="0" class="raz4"> месяцев + <input type="number" value="0" class="raz4"> дней = <output class="raz4"></output>

<script>
function intF1(e) {
  return e.getFullYear() + "-" + ('0' + (e.getMonth() + 1)).slice(-2) + "-" + ('0' + e.getDate()).slice(-2);
}

var raz = document.querySelectorAll('.raz4');

raz[0].value = intF1(new Date());
raz[4].value = intF1(new Date());

for (var i=0; i<raz.length; i++) {
  raz[i].oninput = function() {
    var D = new Date(raz[0].value);
    D.setFullYear(D.getFullYear() + parseFloat(raz[1].value), D.getMonth() + parseFloat(raz[2].value), D.getDate() + parseFloat(raz[3].value));
    raz[4].innerHTML = intF1(D);
  }
}
</script>

Аналогично с

часыgetHours()setHours()
минутыgetMinutes()setMinutes()
секундыgetSeconds()setSeconds()
миллисекундыgetMilliseconds()setMilliseconds()

Аналогично с вычитанием

.toJSON и 00:00:00

Нужно учитывать разницу между местным и UTC-временем. То есть не , а

<input type="button" value="пример1" onclick="raz1()">
<input type="button" value="пример2" onclick="raz2()">

<script>
function raz1() {
  var Dfrom = new Date();
  alert(Dfrom.toJSON().slice(0,10));
  Dfrom = new Date(Dfrom.getFullYear(), Dfrom.getMonth(), Dfrom.getDate());
  alert(Dfrom.toJSON().slice(0,10));
}
function raz2() {
  var Dfrom = new Date();
  alert(Dfrom.toJSON().slice(0,10));
  Dfrom.setHours(0, new Date().getTimezoneOffset()*-1, 0, 0);
  alert(Dfrom.toJSON().slice(0,10));
}
</script>
в f t
наверх ↑

Комментариев нет: