JavaScript 日期格式
JavaScript 日期处理
Section titled “JavaScript 日期处理”JavaScript 提供了一个内置的 Date 对象,用于处理日期和时间。理解如何创建和操作这些对象对于许多 Web 应用程序至关重要。
创建 Date 对象
Section titled “创建 Date 对象”有几种方法可以创建 Date 对象:
- 使用
new Date():创建一个包含当前日期和时间的Date对象。 - 使用
new Date(milliseconds):根据自 UNIX 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数创建Date对象。 - 使用
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds):这是创建特定本地时间日期的最可靠方法。注意:monthIndex是零索引的(0 表示一月,11 表示十二月)。 - 使用
new Date(dateString):通过解析日期字符串创建一个Date对象。此方法对于非 ISO 8601 格式可能不可靠。
创建 Date 对象的示例:
const currentDate = new Date();console.log(currentDate);
const epochDate = new Date(0);console.log(epochDate); // Shows Thu Jan 01 1970 ...
const specificDate = new Date(2024, 0, 15, 10, 30, 0); // January 15, 2024, 10:30:00 AM (local time)console.log(specificDate);ISO 8601 日期格式
Section titled “ISO 8601 日期格式”ISO 8601 是一种表示日期和时间的国际标准。当使用 new Date(dateString) 解析日期字符串时,ISO 8601 格式在不同的 JavaScript 引擎中解析最可靠。
常见的 ISO 8601 格式:
- 仅日期:
YYYY-MM-DD(例如,“2024-01-15”) - 年和月:
YYYY-MM(例如,“2024-01”) - 仅年份:
YYYY(例如,“2024”) - 日期和时间 (UTC):
YYYY-MM-DDTHH:mm:ssZ(例如,“2024-01-15T10:30:00Z”) - 带偏移量的日期和时间:
YYYY-MM-DDTHH:mm:ss+HH:mm或YYYY-MM-DDTHH:mm:ss-HH:mm(例如,“2024-01-15T15:00:00+05:30”)
const isoDate = new Date("2024-01-15");console.log(isoDate);
const isoDateTimeUTC = new Date("2024-01-15T10:30:00Z");console.log(isoDateTimeUTC.toUTCString());在 ISO 8601 格式中:‘T’ 是一个分隔日期和时间的字面量字符。‘Z’ 表示 UTC(世界协调时间)。还可以指定时区偏移量,如 ‘+05:30’ 或 ‘-08:00’。UTC 是现代时间标准,在大多数技术用途中有效替代了 GMT。
其他日期字符串格式(谨慎使用)
Section titled “其他日期字符串格式(谨慎使用)”虽然 Date 构造函数可能会尝试解析其他人类可读的字符串格式,但这种行为在不同的浏览器和 JavaScript 引擎之间通常是不一致的。强烈建议在生产应用中避免依赖解析非 ISO 8601 的日期字符串。
长格式日期(例如,“Jan 15 2024”):
Section titled “长格式日期(例如,“Jan 15 2024”):”像“January 15 2024”或“15 Jan 2024”这样的字符串可能会被解析,但它们的解释可能会有所不同。
// 潜在可解析的长格式日期示例(行为可能因环境而异)const longDate = new Date("Jan 15 2024");// console.log(longDate); // Check output carefully月份名称可以是完整的(January),也可以是缩写(Jan)。逗号通常会被忽略,名称通常不区分大小写,但依赖于这些细节是有风险的。
短格式日期(例如,“MM/DD/YYYY” 或 “DD/MM/YYYY”):
Section titled “短格式日期(例如,“MM/DD/YYYY” 或 “DD/MM/YYYY”):”“01/15/2024”等格式高度模糊。根据区域设置和 JavaScript 引擎的不同,这可能被解释为 1 月 15 日,或者(在某些地区)解释为第 15 个月的第 1 天(这是无效的)。避免直接解析这些格式。
// 模糊短格式日期示例(解析时应避免)// const shortDate = new Date("01/15/2024"); // Highly unreliable实现特定的字符串(例如,Date.prototype.toString() 的输出):
Section titled “实现特定的字符串(例如,Date.prototype.toString() 的输出):”由 myDate.toString() 产生的字符串格式(例如,“Mon Jan 15 2024 10:30:00 GMT+0100 (Central European Standard Time)”)依赖于具体实现,并且在不同浏览器之间有所不同。不应将其用作创建新的 Date 对象的输入格式。
获取和设置日期组件
Section titled “获取和设置日期组件”Date 对象提供了获取和设置日期各个组件的方法:
getFullYear(),setFullYear(year, [month], [date])getMonth()(0-11),setMonth(month, [date])getDate()(1-31),setDate(date)getHours(),setHours(hour, [min], [sec], [ms])getMinutes(),setMinutes(min, [sec], [ms])getSeconds(),setSeconds(sec, [ms])getMilliseconds(),setMilliseconds(ms)getTime()(自 epoch 以来的毫秒数),setTime(milliseconds)getDay()(星期几,0 代表星期日,6 代表星期六)
const demoDate = new Date(2024, 0, 15); // Jan 15, 2024console.log(demoDate.getFullYear()); // 2024console.log(demoDate.getMonth()); // 0 (January)demoDate.setDate(20);console.log(demoDate.toDateString()); // Shows date with day 20格式化日期以供显示
Section titled “格式化日期以供显示”为了以人类可读、区域设置敏感的格式向用户显示日期,Intl.DateTimeFormat 对象是现代的标准。
const displayDate = new Date(2024, 0, 15, 14, 0, 0);
const formatterUs = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit'});console.log(formatterUs.format(displayDate)); // e.g., "January 15, 2024, 02:00 PM"
const formatterGb = new Intl.DateTimeFormat('en-GB', { dateStyle: 'medium', timeStyle: 'short'});console.log(formatterGb.format(displayDate)); // e.g., "15 Jan 2024, 14:00"有关 Intl.DateTimeFormat 的更多选项和区域设置信息,请参阅 MDN Web 文档。
最佳实践和库
Section titled “最佳实践和库”总结处理 JavaScript 中日期的最佳实践:
- 优先使用数字组件创建日期:
new Date(year, monthIndex, ...)以获得最大的可靠性。 - 解析字符串时,使用 ISO 8601 格式:
new Date('YYYY-MM-DDTHH:mm:ssZ')。 - 注意月份是零索引的(0 代表一月)。
- 使用
Intl.DateTimeFormat向用户显示日期。 - 对于复杂的日期操作、时区处理、持续时间计算或稳健地解析各种格式,考虑使用成熟的日期工具库。常用的选择包括
date-fns和Luxon。这些库通常比原生Date对象提供了更直观和全面的 API,适用于高级场景。
您可以在 npm(Node 包管理器)上找到这些库,并将它们包含在您的项目中。例如,搜索“date-fns library”或“Luxon library”以获取文档和安装说明。