Quick answer
1767225600 is the Unix timestamp for:
2026-01-01T00:00:00.000Z
Use it when you mean the UTC start of calendar year 2026.
| Meaning | Value |
|---|---|
| Unix seconds | 1767225600 |
| Unix milliseconds | 1767225600000 |
| ISO 8601 UTC | 2026-01-01T00:00:00.000Z |
| Inclusive lower bound for 2026 | >= 1767225600 |
| Exclusive upper bound for 2026 | < 1798761600 |
| Last whole second before 2026 | 1767225599 |
For a full-year 2026 UTC query, use:
WHERE event_time >= 1767225600
AND event_time < 1798761600
That includes every instant in 2026 and excludes 2027-01-01T00:00:00Z.
What 1767225600 means
Unix time counts forward from 1970-01-01 00:00:00 UTC. The value 1767225600 is the exact instant when UTC crosses from 2025 into 2026.
That sounds simple, but this number is usually copied into places where the details matter:
- analytics filters for "all of 2026"
- billing or subscription start dates
- log searches around New Year's Eve
- database migrations with hard-coded boundaries
- automated tests that need a stable year-start fixture
- API payloads that use Unix seconds instead of ISO strings
The safest wording is:
1767225600 is the inclusive UTC lower bound for 2026.
It is not automatically the local start of 2026 for every user, office, or reporting timezone.
Seconds, milliseconds, microseconds, and nanoseconds
The public Unix timestamp is usually shown in seconds. Some systems need a different unit.
| Unit | Start of 2026 value | Typical use |
|---|---|---|
| Seconds | 1767225600 |
Unix tools, many APIs, JWT-style claims, SQL epoch values |
| Milliseconds | 1767225600000 |
JavaScript Date, Java epoch millis, .NET Unix milliseconds |
| Microseconds | 1767225600000000 |
some database exports and event pipelines |
| Nanoseconds | 1767225600000000000 |
tracing systems and high-resolution telemetry |
Make the unit visible in field names:
year_start_seconds
year_start_ms
event_time_us
trace_time_ns
Avoid a bare field named timestamp when a codebase mixes seconds and milliseconds.
SQL ranges: use 1767225600 as the lower bound
For all UTC events in 2026, use a half-open range: start inclusive, end exclusive.
Epoch seconds column
SELECT *
FROM events
WHERE event_ts_seconds >= 1767225600
AND event_ts_seconds < 1798761600;
Epoch milliseconds column
SELECT *
FROM events
WHERE event_ts_ms >= 1767225600000
AND event_ts_ms < 1798761600000;
PostgreSQL timestamp column
SELECT *
FROM events
WHERE event_time >= TIMESTAMPTZ '2026-01-01 00:00:00+00'
AND event_time < TIMESTAMPTZ '2027-01-01 00:00:00+00';
Do not mix units:
-- Wrong: comparing a millisecond column to a seconds boundary
WHERE event_ts_ms >= 1767225600
That bug usually makes the filter include the wrong decade of data.
JavaScript, Python, shell, and SQL checks
Use a runtime check before pasting a year boundary into production code.
JavaScript
Date.UTC() returns milliseconds, so divide by 1000 for Unix seconds:
const start2026Seconds = Date.UTC(2026, 0, 1) / 1000;
const start2026Ms = Date.UTC(2026, 0, 1);
console.log(start2026Seconds);
// 1767225600
console.log(new Date(start2026Ms).toISOString());
// 2026-01-01T00:00:00.000Z
The month index is zero-based: 0 means January.
Python
Use an aware UTC datetime:
from datetime import datetime, timezone
start_2026 = datetime(2026, 1, 1, tzinfo=timezone.utc)
print(int(start_2026.timestamp()))
# 1767225600
Avoid naive datetimes when the boundary is meant to be UTC:
# Risky if the host machine is not set to UTC
datetime(2026, 1, 1).timestamp()
macOS / BSD shell
date -u -j -f '%Y-%m-%d %H:%M:%S' '2026-01-01 00:00:00' +%s
# 1767225600
date -u -r 1767225600 '+%Y-%m-%dT%H:%M:%SZ'
# 2026-01-01T00:00:00Z
Linux / GNU date
date -u -d '2026-01-01 00:00:00' +%s
# 1767225600
date -u -d @1767225600 '+%Y-%m-%dT%H:%M:%SZ'
# 2026-01-01T00:00:00Z
SQLite
SELECT datetime(1767225600, 'unixepoch');
-- 2026-01-01 00:00:00
UTC boundary vs local start of 2026
1767225600 is midnight in UTC. The same instant appears as a different wall-clock time elsewhere.
| Timezone display | Local time at Unix 1767225600 |
|---|---|
| UTC | 2026-01-01 00:00:00 |
| America/New_York | 2025-12-31 19:00:00 |
| America/Los_Angeles | 2025-12-31 16:00:00 |
| Europe/London | 2026-01-01 00:00:00 |
| Asia/Shanghai | 2026-01-01 08:00:00 |
| Asia/Tokyo | 2026-01-01 09:00:00 |
That table answers "what does 1767225600 look like locally?"
A different question is: "what is the Unix timestamp for local midnight at the start of 2026?" Those values are different:
| Reporting timezone | Local boundary | UTC instant | Unix seconds |
|---|---|---|---|
| UTC | 2026-01-01 00:00:00 |
2026-01-01 00:00:00Z |
1767225600 |
| America/New_York | 2026-01-01 00:00:00 |
2026-01-01 05:00:00Z |
1767243600 |
| America/Los_Angeles | 2026-01-01 00:00:00 |
2026-01-01 08:00:00Z |
1767254400 |
| Europe/London | 2026-01-01 00:00:00 |
2026-01-01 00:00:00Z |
1767225600 |
| Asia/Shanghai | 2026-01-01 00:00:00 |
2025-12-31 16:00:00Z |
1767196800 |
| Asia/Tokyo | 2026-01-01 00:00:00 |
2025-12-31 15:00:00Z |
1767193200 |
If your dashboard says "2026 revenue in New York time", the lower bound is 1767243600, not 1767225600.
Use an IANA timezone name such as America/New_York, not a hard-coded offset. Offsets change with daylight-saving rules and political timezone changes.
Computing year-start timestamps safely
Do not compute year starts by adding 365 * 86400 to the previous boundary. Leap years eventually break that shortcut.
Use a date library:
function utcYearStartSeconds(year) {
return Date.UTC(year, 0, 1) / 1000;
}
console.log(utcYearStartSeconds(2026));
// 1767225600
Python:
def utc_year_start_seconds(year: int) -> int:
return int(datetime(year, 1, 1, tzinfo=timezone.utc).timestamp())
Useful nearby UTC boundaries:
| Boundary | Unix seconds | UTC time |
|---|---|---|
| Start of 2025 | 1735689600 |
2025-01-01 00:00:00 UTC |
| Start of 2026 | 1767225600 |
2026-01-01 00:00:00 UTC |
| End of 2026 / start of 2027 | 1798761600 |
2027-01-01 00:00:00 UTC |
| Last whole second of 2026 | 1798761599 |
2026-12-31 23:59:59 UTC |
2026 is not a leap year:
1798761600 - 1767225600 = 31536000
31536000 = 365 * 86400
Common mistakes with 1767225600
Treating seconds as milliseconds
JavaScript Date expects milliseconds:
new Date(1767225600).toISOString();
// 1970-01-21T10:53:45.600Z <-- wrong unit
new Date(1767225600 * 1000).toISOString();
// 2026-01-01T00:00:00.000Z
Using UTC when the report is local
UTC year boundaries are correct for logs, APIs, and global event tables. Local business reports may need a local-year boundary first. Compute local midnight in the report timezone, then convert to UTC.
Writing inclusive end-of-year filters
This is fragile for fractional seconds:
WHERE event_time BETWEEN 1767225600 AND 1798761599
This is safer:
WHERE event_time >= 1767225600
AND event_time < 1798761600
Hiding the unit in variable names
Prefer:
start_of_2026_seconds
startOf2026Ms
Avoid:
timestamp
start
Copy-paste checklist
Before shipping 1767225600, check:
- The boundary is meant to be UTC, not a local business timezone.
- The receiving system expects seconds, not milliseconds.
- A 13-digit version is used for JavaScript Date and millisecond columns.
- The 2026 range uses
< 1798761600as the upper bound. - Test data includes one row before
1767225600, one exactly at it, and one exactly at1798761600. - Human-facing docs include the ISO string
2026-01-01T00:00:00Zbeside the raw number.
Official references
- MDN Date.UTC - JavaScript UTC date construction returns milliseconds since the Unix epoch.
- MDN JavaScript Date - JavaScript
Daterepresents one timestamp value. - Python datetime timestamp - Python conversion from aware datetimes to Unix timestamps.
- PostgreSQL date/time functions - timestamp comparison, extraction, and timezone-aware date functions.
- IANA Time Zone Database - canonical timezone names and rule data.
Related timestamp guides
FAQ
- What is the Unix timestamp for the start of 2026?
- The start of 2026 in UTC is Unix timestamp 1767225600 seconds, or 1767225600000 milliseconds. It represents 2026-01-01 00:00:00 UTC.
- What date is 1767225600?
- 1767225600 converts to 2026-01-01T00:00:00.000Z. It is midnight at the start of January 1, 2026 in UTC.
- Is 1767225600 local midnight everywhere?
- No. It is midnight in UTC only. At that same instant it is 2025-12-31 19:00 in New York, 2025-12-31 16:00 in Los Angeles, 2026-01-01 08:00 in Shanghai, and 2026-01-01 09:00 in Tokyo.
- What is the millisecond timestamp for the start of 2026?
- The millisecond form is 1767225600000. Use that value for JavaScript Date, Java Instant.ofEpochMilli, and database columns that explicitly store epoch milliseconds.
- How do I use 1767225600 in a SQL range for 2026?
- Use a half-open range: WHERE event_time >= 1767225600 AND event_time < 1798761600 for epoch seconds. For millisecond columns, use >= 1767225600000 and < 1798761600000.
- What is the end timestamp for 2026?
- The exclusive end of 2026 is 1798761600, which is also the start of 2027 in UTC. The last whole second inside 2026 is 1798761599, but range queries should usually use the exclusive 1798761600 boundary.
- How do I calculate the start of 2026 in JavaScript?
- Use Date.UTC(2026, 0, 1) / 1000 for seconds, or Date.UTC(2026, 0, 1) for milliseconds. The month index is zero-based, so 0 means January.
- How do I calculate the start of 2026 in Python?
- Use an aware UTC datetime: int(datetime(2026, 1, 1, tzinfo=timezone.utc).timestamp()). Avoid naive datetimes when the boundary must be UTC.
- What if my report uses a local timezone?
- Compute local midnight in the report timezone first, then convert that instant to UTC. For example, 2026-01-01 00:00 in America/New_York is Unix timestamp 1767243600, not 1767225600.