Days between dates: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring the hard way, phix/basics
m (→‎{{header|Phix}}: added syntax colouring the hard way, phix/basics)
Line 943:
 
=={{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>
Note that elapsed() assumes all years are exactly 365 days, and in no way takes leap years into consideration
7,796

edits