how to identify leap years

6 ビュー (過去 30 日間)
Anisia a
Anisia a 2020 年 5 月 18 日
コメント済み: Steven Lord 2020 年 5 月 18 日
Hi,
I am trying to create a function that takes 3 +ve integer scalar inputs year, month and date. If these 3 represent a valid date return true otherwise return false. My code is running for most of the input. But I am having problem with leap years. The code I wrote is given below. Can anyone please point out my mistake.
function valid= valid_date(year, month, date)
v=1;
a= mode(year,4);
b= mode(year,100);
c= mode(year,400);
if ~isscalar(year) || year<1 || year~=fix(year) || ~isscalar(month) || month<1 || month~=fix(month) ||~isscalar(date)|| date<1 || date~=fix(date)
v= 0;
end
if v==0
valid=false;
return
end
if 0>month || month>12
v= 0;
elseif (month==1 ||month==3|| month==5 || month==7 || month==8|| month==10|| month==12)
if 0<date&& date<=31
v=1;
else
v=0;
end
elseif (month== 4 ||month==6|| month==9 || month==11)
if 0<date&& date<31
v=1;
else
v=0;
end
elseif month==2
if date==29
if (a==0 && b~=0) || c==0
v=1;
else
v=0;
end
elseif 0<date && date<29
v=1;
else
v=0;
end
end
if v==0
valid=false;
else
valid=true;
end

回答 (1 件)

Stijn Haenen
Stijn Haenen 2020 年 5 月 18 日
編集済み: Stijn Haenen 2020 年 5 月 18 日
There is a leap year every four years, so you can use this:
if mod(year,4)==0
'leap year'
else
'not a leap year'
end
  4 件のコメント
Steven Lord
Steven Lord 2020 年 5 月 18 日
Yes. The Wikipedia page has the algorithm for how to determine whether a year is a leap year.

サインインしてコメントする。

カテゴリ

Find more on Dates and Time in Help Center and File Exchange

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by