Days between dates: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring the hard way, phix/basics)
Line 943: Line 943:


=={{header|Phix}}==
=={{header|Phix}}==
{{libheader|Phix/basics}}
<lang Phix>include builtins\timedate.e
<!--<lang Phix>-->
-- specify as many or as few permitted formats as you like:
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins<span style="color: #0000FF;">\<span style="color: #004080;">timedate<span style="color: #0000FF;">.<span style="color: #000000;">e</span>
set_timedate_formats({"YYYY-MM-DD","DD/MM/YYYY","YYYY/MM/DD"})
<span style="color: #000080;font-style:italic;">-- specify as many or as few permitted formats as you like:</span>

<span style="color: #7060A8;">set_timedate_formats<span style="color: #0000FF;">(<span style="color: #0000FF;">{<span style="color: #008000;">"YYYY-MM-DD"<span style="color: #0000FF;">,<span style="color: #008000;">"DD/MM/YYYY"<span style="color: #0000FF;">,<span style="color: #008000;">"YYYY/MM/DD"<span style="color: #0000FF;">}<span style="color: #0000FF;">)</span>
constant SECONDS_TO_DAYS = 60*60*24

<span style="color: #008080;">constant</span> <span style="color: #000000;">SECONDS_TO_DAYS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">60<span style="color: #0000FF;">*<span style="color: #000000;">60<span style="color: #0000FF;">*<span style="color: #000000;">24</span>
procedure test(string d1, d2, desc="")
timedate td1 = parse_date_string(d1),
<span style="color: #008080;">procedure</span> <span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #004080;">string</span> <span style="color: #000000;">d1<span style="color: #0000FF;">,</span> <span style="color: #000000;">d2<span style="color: #0000FF;">,</span> <span style="color: #000000;">desc<span style="color: #0000FF;">=<span style="color: #008000;">""<span style="color: #0000FF;">)</span>
td2 = parse_date_string(d2)
<span style="color: #004080;">timedate</span> <span style="color: #000000;">td1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">parse_date_string<span style="color: #0000FF;">(<span style="color: #000000;">d1<span style="color: #0000FF;">)<span style="color: #0000FF;">,</span>
atom s = timedate_diff(td1,td2,DT_DAY),
<span style="color: #000000;">td2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">parse_date_string<span style="color: #0000FF;">(<span style="color: #000000;">d2<span style="color: #0000FF;">)</span>
d = s/SECONDS_TO_DAYS
<span style="color: #004080;">atom</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">timedate_diff<span style="color: #0000FF;">(<span style="color: #000000;">td1<span style="color: #0000FF;">,<span style="color: #000000;">td2<span style="color: #0000FF;">,<span style="color: #000000;">DT_DAY<span style="color: #0000FF;">)<span style="color: #0000FF;">,</span>
string e = elapsed(s)&desc
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s<span style="color: #0000FF;">/<span style="color: #000000;">SECONDS_TO_DAYS</span>
printf(1,"Days between %s and %s: %d [%s]\n",{d1,d2,d,e})
<span style="color: #004080;">string</span> <span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">elapsed<span style="color: #0000FF;">(<span style="color: #000000;">s<span style="color: #0000FF;">)<span style="color: #0000FF;">&<span style="color: #000000;">desc</span>
end procedure
<span style="color: #7060A8;">printf<span style="color: #0000FF;">(<span style="color: #000000;">1<span style="color: #0000FF;">,<span style="color: #008000;">"Days between %s and %s: %d [%s]\n"<span style="color: #0000FF;">,<span style="color: #0000FF;">{<span style="color: #000000;">d1<span style="color: #0000FF;">,<span style="color: #000000;">d2<span style="color: #0000FF;">,<span style="color: #000000;">d<span style="color: #0000FF;">,<span style="color: #000000;">e<span style="color: #0000FF;">}<span style="color: #0000FF;">)</span>
test("1969-12-31","1970-01-01")
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
test("1995-11-21","1995-11-21",", same date")
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"1969-12-31"<span style="color: #0000FF;">,<span style="color: #008000;">"1970-01-01"<span style="color: #0000FF;">)</span>
test("2019-01-02","2019-01-01",", negative date")
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"1995-11-21"<span style="color: #0000FF;">,<span style="color: #008000;">"1995-11-21"<span style="color: #0000FF;">,<span style="color: #008000;">", same date"<span style="color: #0000FF;">)</span>
test("2019-01-01","2019-03-01",", non-leap year")
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"2019-01-02"<span style="color: #0000FF;">,<span style="color: #008000;">"2019-01-01"<span style="color: #0000FF;">,<span style="color: #008000;">", negative date"<span style="color: #0000FF;">)</span>
test("2020-01-01","2020-03-01",", leap year")
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"2019-01-01"<span style="color: #0000FF;">,<span style="color: #008000;">"2019-03-01"<span style="color: #0000FF;">,<span style="color: #008000;">", non-leap year"<span style="color: #0000FF;">)</span>
test("1970-01-01", "2019/10/18")
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"2020-01-01"<span style="color: #0000FF;">,<span style="color: #008000;">"2020-03-01"<span style="color: #0000FF;">,<span style="color: #008000;">", leap year"<span style="color: #0000FF;">)</span>
test("1970-01-01", "18/10/2019")</lang>
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"1970-01-01"<span style="color: #0000FF;">,</span> <span style="color: #008000;">"2019/10/18"<span style="color: #0000FF;">)</span>
<span style="color: #000000;">test<span style="color: #0000FF;">(<span style="color: #008000;">"1970-01-01"<span style="color: #0000FF;">,</span> <span style="color: #008000;">"18/10/2019"<span style="color: #0000FF;">)
<!--</lang>-->
As shown, timedate_diff() can optionally round to the nearest whole number of days [else omit DT_DAY].<br>
As shown, timedate_diff() can optionally round to the nearest whole number of days [else omit DT_DAY].<br>
Note that elapsed() assumes all years are exactly 365 days, and in no way takes leap years into consideration
Note that elapsed() assumes all years are exactly 365 days, and in no way takes leap years into consideration