UTC 日期时间到 ES6 中的完整日期
UTC Date Time to Full Date in ES6
如何将这个 2021-01-10 12:47:29 UTC
转换为 January 10, 2021?
我在下面使用 moment.js 但这适用于浏览器,但不适用于 Safari
{moment(video?.createdAt).format('MMMM D, YYYY')}
Moment.js is deprecated. 这是使用本机 JS 功能的替代方法。
首先我们需要将日期字符串转换成一个Date
对象。如 Date()
constructor page on MDN:
所述,调用 new Date(video?.createdAt)
不可靠
Parsing of date strings with the Date
constructor
(and Date.parse()
, which works the same way)
is strongly discouraged due to browser differences and inconsistencies.
有关正确格式的参考,请参阅 Date Time String Format on MDN。例如:
// This expects inputs in the form of
// `2021-01-10 12:47:29 UTC`
function parseDate(dateString) {
const [date, time] = dateString.split(' ')
return new Date(`${date}T${time}.000Z`) // Z = UTC
}
然后我们可以使用Date.prototype.toLocaleString()
格式化Date
对象:
// This expects inputs in the form of
// `2021-01-10 12:47:29 UTC`
function parseDate(dateString) {
const [date, time] = dateString.split(' ')
return new Date(`${date}T${time}.000Z`) // Z = UTC
}
function format(dateString) {
if (!dateString) return 'some fallback value'
const date = parseDate(dateString)
return date.toLocaleString('en', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
})
}
console.log(format('2021-01-10 12:47:29 UTC'))
//=> January 10, 2021, 2:47 PM
console.log(format(undefined))
//=> some fallback value
有关所有可能的选项,请参阅 Intl.DateTimeFormat()
。例如,这些选项产生略有不同的结果:
return date.toLocaleString('en', {
dateStyle: 'long',
timeStyle: 'short',
})
format('2021-01-10 12:47:29 UTC')
//=> January 10, 2021 at 2:47 PM
如果日期字符串可以采用多种格式,您可能需要更强大的日期解析。或者,如果您需要奇特的格式,toLocaleString()
可能无法满足您的需求。在这些情况下,使用 recommended Moment.js alternatives.
之一可能会有用
新的 Intl DateTimeFormat API is gaining more support natively in many browsers, so it is a more future proof solution. As suggested in the doc, you can use polyfills 适用于不完全支持此功能的浏览器。不幸的是,Safari 是尚未赶上的浏览器之一。
一个简短的片段可以实现您正在寻找的东西
new Intl.DateTimeFormat('en-US', { dateStyle: 'long'}).format(new Date("2021-01-10 12:47:29Z")) // outputs January 10, 2021
请记住,末尾没有 Z
的日期时间字符串将被解析为当地时间。 Z
表示提供的日期时间是 UTC。
如果您要搜索 moment.js 替代方案,我建议 date-fns. Here is a blog post 比较其中的两个。
这是 date-fns 的 format 文档。
因此,使用 date-fns 回答您的问题:
format(new Date(video?.createdAt), 'MMMM D, YYYY')
如何将这个 2021-01-10 12:47:29 UTC
转换为 January 10, 2021?
我在下面使用 moment.js 但这适用于浏览器,但不适用于 Safari
{moment(video?.createdAt).format('MMMM D, YYYY')}
Moment.js is deprecated. 这是使用本机 JS 功能的替代方法。
首先我们需要将日期字符串转换成一个Date
对象。如 Date()
constructor page on MDN:
new Date(video?.createdAt)
不可靠
Parsing of date strings with the
Date
constructor (andDate.parse()
, which works the same way) is strongly discouraged due to browser differences and inconsistencies.
有关正确格式的参考,请参阅 Date Time String Format on MDN。例如:
// This expects inputs in the form of
// `2021-01-10 12:47:29 UTC`
function parseDate(dateString) {
const [date, time] = dateString.split(' ')
return new Date(`${date}T${time}.000Z`) // Z = UTC
}
然后我们可以使用Date.prototype.toLocaleString()
格式化Date
对象:
// This expects inputs in the form of
// `2021-01-10 12:47:29 UTC`
function parseDate(dateString) {
const [date, time] = dateString.split(' ')
return new Date(`${date}T${time}.000Z`) // Z = UTC
}
function format(dateString) {
if (!dateString) return 'some fallback value'
const date = parseDate(dateString)
return date.toLocaleString('en', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
})
}
console.log(format('2021-01-10 12:47:29 UTC'))
//=> January 10, 2021, 2:47 PM
console.log(format(undefined))
//=> some fallback value
有关所有可能的选项,请参阅 Intl.DateTimeFormat()
。例如,这些选项产生略有不同的结果:
return date.toLocaleString('en', {
dateStyle: 'long',
timeStyle: 'short',
})
format('2021-01-10 12:47:29 UTC')
//=> January 10, 2021 at 2:47 PM
如果日期字符串可以采用多种格式,您可能需要更强大的日期解析。或者,如果您需要奇特的格式,toLocaleString()
可能无法满足您的需求。在这些情况下,使用 recommended Moment.js alternatives.
新的 Intl DateTimeFormat API is gaining more support natively in many browsers, so it is a more future proof solution. As suggested in the doc, you can use polyfills 适用于不完全支持此功能的浏览器。不幸的是,Safari 是尚未赶上的浏览器之一。
一个简短的片段可以实现您正在寻找的东西
new Intl.DateTimeFormat('en-US', { dateStyle: 'long'}).format(new Date("2021-01-10 12:47:29Z")) // outputs January 10, 2021
请记住,末尾没有 Z
的日期时间字符串将被解析为当地时间。 Z
表示提供的日期时间是 UTC。
如果您要搜索 moment.js 替代方案,我建议 date-fns. Here is a blog post 比较其中的两个。
这是 date-fns 的 format 文档。
因此,使用 date-fns 回答您的问题:
format(new Date(video?.createdAt), 'MMMM D, YYYY')