@casablanca 有一个很好的答案,但它已经 10 多年了,这在 Google 中仍然很重要,所以我想我会更新一个新的答案。
TL;DR
// Use an ISO or Unix time string to generate `Month DD, YYYY`
const newDate = new Date('23-12-2010')
const simpleDate = `${newDate.toLocaleString('en-us', { month: 'long' } )} ${newDate.getDate()}, ${newDate.getFullYear()}`
// yields: December, 23 2010 (if you want date suffix, read until the end)
背景:日期有多种格式,但您大多会收到:
- ISO 8601 格式日期 (
YYYY-MM-DDTHH:mm:ss.sssZ),其中 Z 是 UTC 时区偏移量。您可能还会得到其中的一个子集(即YYYY-MM-DD)
- Unix 时间戳格式日期 (
1539734400),其中数字实际上是自 Unix 时间 1970 年 1 月 1 日开始以来的总毫秒数。
基础知识: JS 有一个内置的 Date 原型,它接受 ISO 8601 及其衍生版本(只是时间或日期)。您可以使用new Date 实例化并返回一个日期对象,或者您可以使用Date.parse() 方法返回一个Unix 时间戳。
const dateObj = new Date('23-12-2010:23:12:00') // returns date object
const dateDateOnly = new Date('23-12-2010') // returns date object
const dateTimeOnly = new Date('23:12:00') // returns date object
const dateString = Date.parse('23-12-2010:23:12:00') // returns Unix timestamp string
您还可以将日期分解为 7 个参数:年、月(从 0 开始)、日、小时、分钟、秒和毫秒以及时区偏移量 - 注意,我使用了 multi -params 在我的职业生涯中只使用过一次。由于我在德克萨斯州,所以当我运行以下命令时,我得到了 UTC-5(中部时间):
const dateByParam = new Date(2021, 2, 26, 13, 50, 13, 30) // Fri Mar 26 2021 13:50:13 GMT-0500 (Central Daylight Time)
New-ish Stuff toLocaleString: 通常情况下,Date 对象的返回仍然像我们的上一个示例 (Fri Mar 26 2021 13:50:13 GMT-0500 (Central Daylight Time) 一样非常密集,因此添加了其他方法来帮助开发人员.
通常有一个日期,我想要 March 21st, 2021 之类的东西 - 很长时间以来很容易获得日期和年份:
// Assuming myDate is a JS Date object...
myDate.getDate() // date on the calendar, ie 22
myDate.getDay() // day of the week, where 0 means Sunday, 1 means monday, etc
myDate.getFullYear() // 4 digit year, ie, 2021
但我一直必须构建一个函数来将getDay 转换为January, February, March,现在不再需要了。 toLocaleString() 给你一些新的超能力。您可以向它传递两个参数,一个区域字符串(即en-us)和一个包含您想要返回的对象(即{ month: 'long' })。如果需要,这有助于使响应国际化。
// Again, assuming myDate is a JS Date object...
myDate.toLocaleString('en-us', { month: 'long' } ) // March
日期后缀我仍然没有看到任何内置方法来获取日期的后缀,例如 th, st,所以我构建了这个实用函数,它使用模数 % 运算符来检查每天数字的除数并应用正确的后缀(针对美国观众,但在其他地方可能相同?)。
/**
* setDateSuffix()
*
* Desc: Takes two digit date, adds 'st', 'nd', 'rd', etc
*
* @param { integer } num - a number date
*/
export const setDateSuffix = (num) => {
const j = num % 10,
k = num % 100
if (j === 1 && k !== 11) {
return num + "st";
}
if (j === 2 && k !== 12) {
return num + "nd";
}
if (j === 3 && k !== 13) {
return num + "rd";
}
return num + "th";
}
现在一齐.. 到达这里的方式很长,但是如果给我一个 ISO 或 Unix 日期并且我想要Month DDth, YYYY,这就是我运行的:
// setDateSuffix IS NOT PART OF BUILT-IN JS!
const newDate = new Date('23-12-2010')
const simpleDate = `${newDate.toLocaleString('en-us', { month: 'long' } )} ${setDateSuffix(newDate.getDate())}, ${newDate.getFullYear()}`
// yields: December 23rd, 2010
注意 - 当temporal 在 JS 中变为现实时,所有这些都可能会改变,希望会变得更好:https://github.com/tc39/proposal-temporal。期待有人在 2030 年更新这篇文章!