staticdata.dev
Menu
Datasets About Contact

Months

All 12 Gregorian calendar months in order, each with its 1-based ordinal number, full English name, ISO/locale-standard 3-letter abbreviation, and the standard (non-leap) day count. February is recorded as 28 days — the value for a common year.

v1.0.0 MIT 12 records Updated 2026-10-05 stable Source:  ISO 8601 / Gregorian calendar (curated)

Quick fetch

Stable URL. CORS-enabled. No auth.

bash
curl https://staticdata.dev/v1/months.json

Or use as a typed import: import { months } from "https://staticdata.dev/v1/months.ts"

Formats

  • JSON 1.1 KB

    /v1/months.json

    Open

    min: 726 B · /v1/months.min.json

  • CSV 240 B

    /v1/months.csv

    Open
  • TypeScript 1.2 KB

    /v1/months.ts

    export const months

    type Month = (typeof months)[number]

    Open

Schema

Each record in the dataset has the following shape.

Schema
Field Type Description Example
number number 1-based month ordinal (1 = January, 12 = December) 1
name string Full English month name January
abbreviation string 3-letter English abbreviation Jan
days number Standard day count (February recorded as 28 for a common year) 31

Preview

First 10 records.

Data preview
numbernameabbreviationdays
1JanuaryJan31
2FebruaryFeb28
3MarchMar31
4AprilApr30
5MayMay31
6JuneJun30
7JulyJul31
8AugustAug31
9SeptemberSep30
10OctoberOct31

Showing 10 of 12. View full data:  JSON · CSV

Fetch examples

Drop-in snippets in five languages.

curl
curl -sSL https://staticdata.dev/v1/months.json | jq '.[0]'
JavaScript
import type { Month } from "https://staticdata.dev/v1/months.ts";

const res = await fetch("https://staticdata.dev/v1/months.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const months: Month[] = await res.json();
console.log(months[0]);
Python
import urllib.request, json

with urllib.request.urlopen("https://staticdata.dev/v1/months.min.json") as r:
    months = json.load(r)

print(months[0])
Go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	resp, err := http.Get("https://staticdata.dev/v1/months.min.json")
	if err != nil { panic(err) }
	defer resp.Body.Close()

	var data []map[string]any
	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
		panic(err)
	}
	fmt.Println(data[0])
}
Rust
use serde_json::Value;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let body = ureq::get("https://staticdata.dev/v1/months.min.json").call()?.into_string()?;
    let data: Vec<Value> = serde_json::from_str(&body)?;
    println!("{:?}", data.first());
    Ok(())
}

Sources and methodology

The dataset lists all 12 months of the proleptic Gregorian calendar in order, following ISO 8601 month numbering (January = 1, December = 12). Names and abbreviations are the standard English forms used by POSIX locales, JavaScript’s Date API, and most programming environments.

The days field records the standard day count for a common (non-leap) year. February is therefore 28. Applications that need leap-year logic should compute February’s length dynamically based on the year rather than relying on this field.

The 3-letter abbreviations match the capitalized forms defined by POSIX strftime (%b) and are identical to those produced by Intl.DateTimeFormat with month: "short" for the en locale.

Versioning

URLs under /v1/ are stable: field names and types will not change in a way that breaks consumers. Values can be corrected or records added when the upstream source changes; schema-incompatible updates ship under a new version path. See the months changelog for this dataset's history.

More Locale datasets