Convert Unix Timestamp in JavaScript
JavaScript handles Unix timestamps natively through the Date object. The key difference from other languages is that JavaScript uses milliseconds instead of seconds.
Unix Timestamp to Date
// From seconds (standard Unix timestamp) const timestampSeconds = 1704067200; const date = new Date(timestampSeconds * 1000); console.log(date.toISOString()); // "2024-01-01T00:00:00.000Z" // From milliseconds (JavaScript native) const timestampMs = 1704067200000; const date2 = new Date(timestampMs); console.log(date2.toISOString()); // "2024-01-01T00:00:00.000Z"
Date to Unix Timestamp
// Get current timestamp in seconds
const nowSeconds = Math.floor(Date.now() / 1000);
console.log(nowSeconds); // e.g., 1704067200
// Get current timestamp in milliseconds
const nowMs = Date.now();
console.log(nowMs); // e.g., 1704067200000
// From specific date
const date = new Date('2024-01-01T00:00:00Z');
const timestamp = Math.floor(date.getTime() / 1000);
console.log(timestamp); // 1704067200Timezone Handling
const timestamp = 1704067200;
const date = new Date(timestamp * 1000);
// UTC
console.log(date.toISOString());
// "2024-01-01T00:00:00.000Z"
// Local timezone
console.log(date.toLocaleString());
// Varies by system timezone
// Specific timezone
console.log(date.toLocaleString('en-US', {
timeZone: 'America/New_York'
}));
// "12/31/2023, 7:00:00 PM"
console.log(date.toLocaleString('en-US', {
timeZone: 'Asia/Tokyo'
}));
// "1/1/2024, 9:00:00 AM"Using Intl.DateTimeFormat for Formatting
const timestamp = 1704067200;
const date = new Date(timestamp * 1000);
const formatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'short',
timeZone: 'UTC'
});
console.log(formatter.format(date));
// "January 1, 2024 at 12:00:00 AM UTC"Common Pitfalls
Seconds vs Milliseconds
JavaScript uses milliseconds, not seconds. Forgetting to multiply/divide by 1000 is the #1 mistake.
// ❌ Wrong - treating seconds as milliseconds new Date(1704067200); // Thu Jan 20 1970 (way off!) // ✅ Correct - multiply seconds by 1000 new Date(1704067200 * 1000); // Mon Jan 01 2024
Parsing Date Strings
Date string parsing varies by browser. Always use ISO 8601 format for consistency.
// ❌ Ambiguous - may parse differently across browsers
new Date('01/02/2024'); // Jan 2 or Feb 1?
// ✅ Unambiguous ISO 8601
new Date('2024-01-02T00:00:00Z');DST Transitions
When converting to local time during DST transitions, some local times may not exist or may be ambiguous. Always store and transmit timestamps in UTC.
Edge Cases
// Negative timestamps (before 1970)
const before1970 = new Date(-86400 * 1000);
console.log(before1970.toISOString()); // "1969-12-31T00:00:00.000Z"
// Maximum safe date
const maxDate = new Date(8640000000000000);
console.log(maxDate.toISOString()); // "+275760-09-13T00:00:00.000Z"
// Check for invalid dates
const invalid = new Date('not a date');
console.log(isNaN(invalid.getTime())); // trueFrequently Asked Questions
What is a Unix timestamp in JavaScript?
A Unix timestamp represents the number of seconds (or milliseconds in JavaScript) elapsed since January 1, 1970, 00:00:00 UTC. JavaScript Date objects use milliseconds internally.
Does JavaScript use seconds or milliseconds for Unix timestamps?
JavaScript uses milliseconds. When working with Unix timestamps from other systems (which typically use seconds), multiply by 1000 before passing to the Date constructor.
How do I handle timezone conversion in JavaScript?
JavaScript Date objects are timezone-aware. Use toLocaleString() with a timeZone option to display in specific timezones, or use toISOString() for UTC.
Why is my Unix timestamp showing the wrong date?
The most common issue is mixing seconds and milliseconds. If your timestamp is 10 digits, it is in seconds—multiply by 1000. If it is 13 digits, it is already in milliseconds.