09 Sept 2026Go / Python / TypeScriptEasy

Day of the Week

Return the weekday name for a Gregorian calendar date.

Count elapsed days from 1 January 1971, adding leap days explicitly, and offset the result from that date's known Friday.

complexity

O(year - 1971) time and O(1) space.

solution files

  • Go day-of-the-week/solution.go
  • Python day-of-the-week/solution.py
  • TypeScript day-of-the-week/solution.ts

Solution files

Goday-of-the-week/solution.go
package main

func dayOfTheWeek(day int, month int, year int) string {
	leap := func(value int) bool { return value%400 == 0 || value%4 == 0 && value%100 != 0 }
	monthDays := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
	elapsed := day - 1
	for value := 1971; value < year; value++ {
		if leap(value) {
			elapsed += 366
		} else {
			elapsed += 365
		}
	}
	for index := 1; index < month; index++ {
		elapsed += monthDays[index-1]
		if index == 2 && leap(year) {
			elapsed++
		}
	}
	return []string{"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"}[elapsed%7]
}
Pythonday-of-the-week/solution.py
class Solution:
    def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
        leap = lambda value: value % class="syntax-number">400 == class="syntax-number">0 or value % class="syntax-number">4 == class="syntax-number">0 and value % class="syntax-number">100 != class="syntax-number">0
        month_days = [class="syntax-number">31, class="syntax-number">28, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31]
        elapsed = day - class="syntax-number">1 + sum(class="syntax-number">366 if leap(value) else class="syntax-number">365 for value in range(class="syntax-number">1971, year))
        elapsed += sum(month_days[index - class="syntax-number">1] + int(index == class="syntax-number">2 and leap(year)) for index in range(class="syntax-number">1, month))
        return [class="syntax-string">"Friday", class="syntax-string">"Saturday", class="syntax-string">"Sunday", class="syntax-string">"Monday", class="syntax-string">"Tuesday", class="syntax-string">"Wednesday", class="syntax-string">"Thursday"][elapsed % class="syntax-number">7]
TypeScriptday-of-the-week/solution.ts
function dayOfTheWeek(day: number, month: number, year: number): string {
  const leap = (value: number): boolean => value % class="syntax-number">400 === class="syntax-number">0 || (value % class="syntax-number">4 === class="syntax-number">0 && value % class="syntax-number">100 !== class="syntax-number">0); const monthDays = [class="syntax-number">31, class="syntax-number">28, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31, class="syntax-number">30, class="syntax-number">31]; let elapsed = day - class="syntax-number">1;
  for (let value = class="syntax-number">1971; value < year; value += class="syntax-number">1) elapsed += leap(value) ? class="syntax-number">366 : class="syntax-number">365; for (let index = class="syntax-number">1; index < month; index += class="syntax-number">1) elapsed += monthDays[index - class="syntax-number">1] + Number(index === class="syntax-number">2 && leap(year));
  return [class="syntax-string">"Friday", class="syntax-string">"Saturday", class="syntax-string">"Sunday", class="syntax-string">"Monday", class="syntax-string">"Tuesday", class="syntax-string">"Wednesday", class="syntax-string">"Thursday"][elapsed % class="syntax-number">7];
}