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.
Quick fetch
Stable URL. CORS-enabled. No auth.
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
min: 726 B · /v1/months.min.json
- CSV 240 B
/v1/months.csv
- TypeScript 1.2 KB
/v1/months.ts
export const months
type Month = (typeof months)[number]
Schema
Each record in the dataset has the following shape.
| 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.
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/months.json | jq '.[0]' 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]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/months.min.json") as r:
months = json.load(r)
print(months[0]) 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])
} 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.