Date Calculator - Calendar Days and Week Days

Calculate number of calendar days or week days between two dates.
Works even across multiple years and leap years.

Updated version

Try with {formmenu: name=choice; test brackets; date picker}

{if: choice=="test brackets"; trim=right}
{formmenu: default=25/12/2019 to 5/3/2020; 5/3/2020 to 25/12/2019; 28/2/2020 to 1/3/2020; 28/2/2019 to 1/3/2019; 1/1/2017 to 1/3/2020; name=bracket}

{note: preview=no}
{date1=split(bracket, " to ")[1]}
{date2=split(bracket, " to ")[2]}
{endnote: trim=right}

{else: trim=right}
{formdate: D/M/YYYY; default={time: D/M/YYYY}; name=date1}
{formdate: D/M/YYYY; default={time: D/M/YYYY}; name=date2}
{endif: trim=right}

{note: preview=no}
{middleyears=map(seq(({time: YYYY; at={=start}; pattern=D/M/YYYY}+1), ({time: YYYY; at={=end}; pattern=D/M/YYYY}-1)), item -> {time: DDD; at={=item}; pattern=YYYY; shift=>Y})}
{if: {time: X; at={=date1}; pattern=D/M/YYYY} > {time: X; at={=date2}; pattern=D/M/YYYY}}{start=date2}{end=date1}{else}{start=date1}{end=date2}{endif}
{if: {time: YYYY; at={=start}; pattern=D/M/YYYY} == {time: YYYY; at={=end}; pattern=D/M/YYYY}}
{daysdiff={time: DDD; at={=end}; pattern=D/M/YYYY} - {time: DDD; at={=start}; pattern=D/M/YYYY}}
{elseif: {time: YYYY; at={=end}; pattern=D/M/YYYY} - {time: YYYY; at={=start}; pattern=D/M/YYYY} > 1}
{daysdiff=daysleftinyear + dayselapsedinyear + sum({=middleyears})}
{else}
{daysdiff=daysleftinyear + dayselapsedinyear}
{endif}

{endnote: trim=right}

There {if: daysdiff <> 1}are {=daysdiff} days{else}is {=daysdiff} day{endif} from {time: dddd, MMMM Do, YYYY; at={=start}; pattern=D/M/YYYY} (excluded) to {time: dddd, MMMM Do, YYYY; at={=end}; pattern=D/M/YYYY} (included).

{if: {time: YYYY; at={=start}; pattern=D/M/YYYY} <> {time: YYYY; at={=end}; pattern=D/M/YYYY}}This includes:
{daysleftinyear={time: DDD; at={=start}; pattern=D/M/YYYY; shift=>Y}-{time: DDD; at={=start}; pattern=D/M/YYYY}}{=daysleftinyear} days left till end of {time: YYYY; at={=start}; pattern=D/M/YYYY}
{if: {time: YYYY; at={=end}; pattern=D/M/YYYY} - {time: YYYY; at={=start}; pattern=D/M/YYYY} > 1}{=join(map(seq(({time: YYYY; at={=start}; pattern=D/M/YYYY}+1), ({time: YYYY; at={=end}; pattern=D/M/YYYY}-1)), item -> concat({time: DDD; at={=item}; pattern=YYYY; shift=>Y}, " days in ", item)), "\n")}
{endif: trim=right}
{dayselapsedinyear={time: DDD; at={=end}; pattern=D/M/YYYY}}{=dayselapsedinyear} days from the beginning of {time: YYYY; at={=end}; pattern=D/M/YYYY}.
{endif}

1 Like