09 Sept 2026Go / Python / TypeScriptEasy

Day of the Year

Convert an ISO calendar date to its one-based ordinal day within the year.

Sum complete preceding month lengths, add the current day, and include February's leap day when the year is leap and the date is after February.

complexity

O(1) time and O(1) space.

solution files

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

Solution files

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

import "strconv"

func dayOfYear(date string) int {
	year, _ := strconv.Atoi(date[:4])
	month, _ := strconv.Atoi(date[5:7])
	day, _ := strconv.Atoi(date[8:])
	days := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
	ordinal := day
	for index := 0; index < month-1; index++ {
		ordinal += days[index]
	}
	if month > 2 && (year%400 == 0 || year%4 == 0 && year%100 != 0) {
		ordinal++
	}
	return ordinal
}
Pythonday-of-the-year/solution.py
class Solution:
    def dayOfYear(self, date: str) -> int:
        year, month, day = map(int, date.split(class="syntax-string">"-")); 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]
        leap = year % class="syntax-number">400 == class="syntax-number">0 or year % class="syntax-number">4 == class="syntax-number">0 and year % class="syntax-number">100 != class="syntax-number">0
        return sum(days[:month - class="syntax-number">1]) + day + int(leap and month > class="syntax-number">2)
TypeScriptday-of-the-year/solution.ts
function dayOfYear(date: string): number {
  const [year, month, day] = date.split(class="syntax-string">"-").map(Number); const 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];
  let ordinal = day; for (let index = class="syntax-number">0; index < month - class="syntax-number">1; index += class="syntax-number">1) ordinal += days[index];
  const leap = year % class="syntax-number">400 === class="syntax-number">0 || (year % class="syntax-number">4 === class="syntax-number">0 && year % class="syntax-number">100 !== class="syntax-number">0); return ordinal + Number(leap && month > class="syntax-number">2);
}