У меня было упражнение по вычислению количества дней между двумя датами без использования встроенных функций в javascript getDate ().

Вот код:

Объяснение:

Рассмотрим две даты: Date1 и Date2. Date1 раньше (в прошлом) по сравнению с Date2.

Итак, если пользователь указывает date1 ›date2 (year 1› year2), мы поменяем даты местами

var swapyear1;
swapyear1=year1;
year1=year2;
year2=swapyear1;
var swapmonth1;
swapmonth1=month1;
month1=month2;
month2=swapmonth1;
var swapday1;
swapday1=day1;
day1=day2;
day2=swapday1;

Если годы такие же, но месяц1 ›месяц2, нам нужно поменять даты местами

var swapmonth2;
swapmonth2=month1;
month1=month2;
month2=swapmonth2;
var swapday2;
swapday2=day1;
day1=day2;
day2=swapday2;

Если year1 является високосным, нам нужно добавить високосный день к февральскому месяцу.

if(year1%4==0 ){
  daysinmonth[1]=29;
} else {
  daysinmonth[1]=28;
}

Мы также должны проверить правильность указанных дат,

i) Таким образом, нам нужно проверить, присутствует ли день в этом месяце (пример: 31-е число отсутствует в месяце апреля).

ii) Введенные месяцы должны быть больше 0 и меньше 12.

Если даты неправильные, отображается ошибка.

if(remainingdaysinmonth1<0 || month1<0 || month1>12 || month2>12 || month2 <0){
  error=1;
  console.log("mistake in date")
  total="error"
}

Нам нужно синхронизировать данный массив month1 с daysinmonth и вычислить оставшиеся дни в этом месяце, начиная с day1 в date1. Мы также вычисляем дни в day2 и добавляем их к оставшимся дням.

monthinarray=month1-1;
daysinmonth1= daysinmonth[monthinarray];
remainingdaysinmonth1=daysinmonth1-day1;
remainingdaysinmonth1andday2=remainingdaysinmonth1+day2;

Если две даты совпадают с месяцем и годом, нам нужно вычесть дни, и абсолютное значение вычтенного значения дает результат. Мы используем absolute, потому что даже если date1 ›date2, мы можем вычислить количество дней между ними без замены.

if (month1==month2&&year1==year2 && error==0){
  inamonth=day2-day1;
  inamonth=Math.abs(inamonth);
  console.log(inamonth,' days')
  total=inamonth;
}

Если два месяца разные и один и тот же год, мы уже поменяли даты, если date1 ›date2. Итак, теперь нам нужно рассчитать количество дней. Мы используем цикл for, чтобы суммировать количество дней между двумя датами и складывать дни между месяцами. И, наконец, мы добавляем дни между месяцами и оставшиеся дни в месяц1 и день2.

if (year1==year2 && error==0){
  for (month1=month1;month1<month2-1;month1++){
    daysinbetweenmonths+=daysinmonth[month1];
  }
  total=daysinbetweenmonths+remainingdaysinmonth1andday2;
  console.log(total,'total no. of days')
}

Если два года разные.

i) середина года - это годы между двумя датами. daysinbetweenyears - количество дней между двумя датами.

ii) Мы вычисляем количество високосных лет между двумя датами, а затем складываем их в сумме.

iii) Мы вычисляем количество дней, оставшихся в этом году (date1), в днях, оставшихся в году1, и количество дней в году2 (date2), в днях, оставшихся в году2.

if(error==0){
var midyear=0;
midyear=year2-year1-1;
var daysinbetweenyears;
daysinbetweenyears=midyear*365;
var daysremaininginyear1=0,daysremaininginyear2=0;
var tempx=0,noofleapyear=0;
  for(tempx=year1;tempx<=year2;tempx++){
    if(tempx%4==0){
    noofleapyear+=1
    }
  }
  for(temp1=month1;temp1<12;temp1++){
  daysremaininginyear1+=daysinmonth[temp1];
  }
  for(temp2=0;temp2<month2-1;temp2++){
  daysremaininginyear2+=daysinmonth[temp2];
  }  total=remainingdaysinmonth1andday2+daysremaininginyear1+daysremainin ginyear2+daysinbetweenyears+noofleapyear;
console.log('total', total );
}

Функция date возвращает «total». Значение total дает количество дней между двумя датами.

Тестирование:

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

var test1=date(20,1,2020,25,1,2020)
if (test1==5) console.log ("test1 passed with same month and year")
var test2=date(25,11,2019,25,12,2019)
if(test2==30) console.log("test2 passed with same year and different months")
var test3=date(1,1,2019,2,1,2020)
if(test3=366) console.log("test3 passed with different 
years(consecutive) and months")
var test4=date(11,11,2011,12,12,2012)
if(test4==397) console.log("test 4 passed with leap year inbetween")
var test5=date(29,2,2019,30,11,2019)
if(test5=="error") console.log("test5 passed found error in date")
var test6=date(29,2,2016,15,4,2016)
if (test6==46) console.log("test 6 passed with leap date as input")
var test7=date(20,1,2020,15,1,2020)
if(test7==5) console.log("test7 passed with date 1 > date2")
var test8=date(5,3,2015,21,8,2019)
if(test8==1630) console.log("test 8 passed with different years leap year inbetween")

Было интересно узнать, как встроенные функции javascript делают нашу жизнь проще и легче, реализуя все сложные вычисления во встроенных функциях Javascript.