Day of the week of Christmas and New Year: Difference between revisions

no edit summary
(→‎{{header|Wren}}: Now uses new Date.fromJulian method.)
No edit summary
 
(7 intermediate revisions by 4 users not shown)
Line 619:
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
func dayOfTheWeek year month day . result .
# Based on Conway's doomsday algorithm
# 1. Calculate the doomsday for the century
century = floor (year / 100)
if century mod 4 = 0
Line 632 ⟶ 631:
centuryDoomsday = 3
.
# 2. Find the doomsday of the year
mainYear = year mod 100
yearDoomsday = (floor (mainYear / 12) + mainYear mod 12 + floor (mainYear mod 12 / 4) + centuryDoomsday) mod 7
# 3. Check if the year is leap
if mainYear = 0
if century mod 4 = 0
Line 649 ⟶ 646:
.
.
# 4. Calculate the DOTW of January 1
if leap = 1
januaryOne = (yearDoomsday + 4) mod 7
Line 655 ⟶ 651:
januaryOne = (yearDoomsday + 5) mod 7
.
monthDays[] = [ 0 31 59 90 120 151 181 212 243 273 304 334 ]
# 5. Determine the nth day of the year
nthDay = monthDays[month]
if month = 1
if month > NthDay = 02
elif month nthDay += 2leap
NthDay = 31
elif month = 3
NthDay = 59 + leap
elif month = 4
NthDay = 90 + leap
elif month = 5
NthDay = 120 + leap
elif month = 6
NthDay = 151 + leap
elif month = 7
NthDay = 181 + leap
elif month = 8
NthDay = 212 + leap
elif month = 9
NthDay = 243 + leap
elif month = 10
NthDay = 273 + leap
elif month = 11
NthDay = 304 + leap
elif month = 12
NthDay = 334 + leap
.
NthDaynthDay += day
return (januaryOne + nthDay - 1) mod 7 + 1
# 6. Finally, calculate the day of the week
result = (januaryOne + NthDay - 1) mod 7
.
days$[] = [ "Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" ]
func numberToDay n . day$ .
#
if n = 0
print "2021-12-25 is on " & days$[dayOfTheWeek 2021 12 25]
day$ = "Sunday"
print "2022-1-1 is on " & days$[dayOfTheWeek 2022 1 1]
elif n = 1
day$ = "Monday"
elif n = 2
day$ = "Tuesday"
elif n = 3
day$ = "Wednesday"
elif n = 4
day$ = "Thursday"
elif n = 5
day$ = "Friday"
elif n = 6
day$ = "Saturday"
.
.
call dayOfTheWeek 2021 12 25 result
call numberToDay result day$
print "2021-12-25 is on " & day$
call dayOfTheWeek 2022 1 1 result
call numberToDay result day$
print "2022-1-1 is on " & day$
</syntaxhighlight>
{{out}}
Line 839 ⟶ 794:
<pre>25.12.2021 is a Saturday
01.01.2022 is a Saturday<</pre>
 
=={{header|Pascal}}==
==={{header|Free Pascal}}===
<syntaxhighlight lang="pascal">
Program daysofweek;
Uses sysutils;
 
Const Years : array Of integer = (1578, 1590, 1642, 1957, 2020, 2021, 2022, 2242, 2245, 2393);
 
Var christmasday, newyearsday : tdatetime;
year : integer;
Begin
For year In years Do
Begin
christmasday := encodeDate(year,12,25);
newyearsday := encodeDate(year,1,1);
writeln('in ',year,' New Years day is on ',DefaultFormatSettings.LongDayNames[DayOfWeek(
newyearsday)],', and Christmas day on a ',DefaultFormatSettings.LongDayNames[DayOfWeek(
christmasday
)]);
End;
End.
</syntaxhighlight>
{{out}}
<pre>
in 1578 New Years day is on Sunday, and Christmas day on a Monday
in 1590 New Years day is on Monday, and Christmas day on a Tuesday
in 1642 New Years day is on Wednesday, and Christmas day on a Thursday
in 1957 New Years day is on Tuesday, and Christmas day on a Wednesday
in 2020 New Years day is on Wednesday, and Christmas day on a Friday
in 2021 New Years day is on Friday, and Christmas day on a Saturday
in 2022 New Years day is on Saturday, and Christmas day on a Sunday
in 2242 New Years day is on Saturday, and Christmas day on a Sunday
in 2245 New Years day is on Wednesday, and Christmas day on a Thursday
in 2393 New Years day is on Friday, and Christmas day on a Saturday
</pre>
 
 
=={{header|Perl}}==
Line 1,081 ⟶ 1,073:
The next New Year's day is on a Saturday.
done...</pre>
 
=={{header|RPL}}==
{{works with|HP|48}}
≪ 1000000 / 25.12 + 0
TSTR 1 3 SUB
"X-MAS: " OVER +
"NEW YEAR: " ROT +
≫ '<span style="color:blue">TASK</span>' STO
 
2021 <span style="color:blue">TASK</span>
{{out}}
<pre>
2: "X-MAS: SAT"
1: "NEW YEAR: SAT"
</pre>
 
=={{header|Ruby}}==
Line 1,111 ⟶ 1,118:
 
The above module uses the Gregorian Proleptic calendar and therefore gives the wrong days of the week for 1578 as the earliest year for the adoption of the Gregorian calendar was 1582 when 10 days (from 5th until 14th October inclusive) were omitted. To get the correct days for 1578 (and agree with the Ruby entry) we therefore need to add 10 days to the Gregorian date which the ''Date.fromJulian'' method does automatically.
<syntaxhighlight lang="ecmascriptwren">import "./date" for Date
 
System.print("Days of week per Gregorian Proleptic calendar:")
45

edits