У меня было упражнение по вычислению количества дней между двумя датами без использования встроенных функций в 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.