Рассчитать в Javascript время между 2 датами от типа ввода даты HTML - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы рассчитать временной интервал между двумя датами, полученными из html (значение даты типа ввода).

Я хочу получить временные рамки в годах, месяцах и днях.

т.е.: 2017-01-01 и 2019-02-15

2 года, 1 месяц, 14 дней

Спасибо,

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Вы можете использовать эту функцию.

<script>
    function getDateDifference(startDate, endDate) {
      if (startDate > endDate) {
        console.error('Start date must be before end date');
        return null;
      }
      var startYear = startDate.getFullYear();
      var startMonth = startDate.getMonth();
      var startDay = startDate.getDate();

      var endYear = endDate.getFullYear();
      var endMonth = endDate.getMonth();
      var endDay = endDate.getDate();

      var february = (endYear % 4 == 0 && endYear % 100 != 0) || endYear % 400 == 0 ? 29 : 28;
      var daysOfMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

      var startDateNotPassedInEndYear = (endMonth < startMonth) || endMonth == startMonth && endDay < startDay;
      var years = endYear - startYear - (startDateNotPassedInEndYear ? 1 : 0);

      var months = (12 + endMonth - startMonth - (endDay < startDay ? 1 : 0)) % 12;

      var days = startDay <= endDay ? endDay - startDay : daysOfMonth[(12 + endMonth - 1) % 12] - startDay + endDay;

      return {
        years: years,
        months: months,
        days: days
      };
    }

    var result = getDateDifference(new Date("2018-01-01"), new Date("2019-01-02"));

    //Print in console array with value
    console.log(result);

    var text = result.years+" year, "+result.months+" month, "+result.days+" days";
    alert(text);
</script>

использовать getDateDifference и параметры первая дата и вторая дата.В оповещении я вставляю демонстрационную версию.

0 голосов
/ 19 февраля 2019

function getTimeBetweenDates(e) {
  var date1 = new Date(document.getElementById("date1").value);
  var date2 = new Date(document.getElementById("date2").value);

  var diff;

  if (date1 < date2) {
    diff = new Date(date2 - date1);
  } else {
    diff = new Date(date1 - date2);
  }

  var years = (diff.getFullYear() - 1970);
  var months = diff.getMonth();
  var days = diff.getDate();

  var yearTxt = "year";
  var monthTxt = "month";
  var dayTxt = "day";

  if (years > 1) yearTxt += "s";
  if (months > 1) monthTxt += "s";
  if (days > 1) dayTxt += "s";

  if (years >= 0) {
    document.getElementById("showdiff").innerHTML = years + " " + yearTxt + ", " + months + " " + monthTxt + ", " + days + " " + dayTxt;
  } else {
    document.getElementById("showdiff").innerHTML = "Equal dates";
  }
}
<form id="form1" action="" method="" onSubmit="event.preventDefault(); getTimeBetweenDates();">
  <input type="date" id="date1">
  <input type="date" id="date2">
</form>

<br>
<button type="submit" form="form1" value="Send">Send</button>

<br>
<p id="showdiff"></p>
0 голосов
/ 19 февраля 2019

вы можете использовать библиотеку моментов

var a = moment([2017, 1, 1]);
var b = moment([2019, 2,15]);

b.diff(a, 'days')  //get difference in days.. 
b.diff(a, 'months') //get difference in months.
b.diff(a, 'years') //get difference in years.. 

или

diff = b.diff(a);

years = moment.duration(diff).get(years);
months = moment.duration(diff).get(months);
days = moment.duration(diff).get(days); 

, библиотеку вы можете найти здесь .. Библиотека Moment.js

надеюсь, это поможет ..

...