Javascript UTC日期时间到ES6中的完整日期

Javascript UTC日期时间到ES6中的完整日期,javascript,reactjs,ecmascript-6,momentjs,moment-timezone,Javascript,Reactjs,Ecmascript 6,Momentjs,Moment Timezone,如何将此2021-01-10 12:47:29 UTC转换为2021年1月10日? 我在下面使用的是moment.js,但它在浏览器中有效,但在Safari中不起作用 {moment(video?.createdAt).format('MMMM D,YYYY')}这里有一个使用原生JS功能的替代方案 首先,我们需要将日期字符串转换为date对象。调用新日期(video?.createdAt)不可靠,如下所述: 使用date构造函数解析日期字符串 (和Date.parse(),其工作方式相同) 由

如何将此
2021-01-10 12:47:29 UTC
转换为
2021年1月10日?

我在下面使用的是moment.js,但它在浏览器中有效,但在Safari中不起作用
{moment(video?.createdAt).format('MMMM D,YYYY')}

这里有一个使用原生JS功能的替代方案

首先,我们需要将日期字符串转换为
date
对象。调用
新日期(video?.createdAt)
不可靠,如下所述:

使用
date
构造函数解析日期字符串 (和
Date.parse()
,其工作方式相同) 由于浏览器差异和不一致,强烈建议不要使用

有关正确格式的参考,请参阅。例如:

//这需要以
//`2021-01-1012:47:29 UTC`
函数parseDate(日期字符串){
const[date,time]=dateString.split(“”)
返回新日期(`${Date}T${time}.000Z`)//Z=UTC
}
然后我们可以使用格式化
日期
对象:

//这需要以
//`2021-01-1012:47:29 UTC`
函数parseDate(日期字符串){
const[date,time]=dateString.split(“”)
返回新日期(`${Date}T${time}.000Z`)//Z=UTC
}
函数格式(日期字符串){
如果(!dateString)返回“某个回退值”
const date=parseDate(日期字符串)
返回日期。toLocaleString('en'{
年份:'数字',
月:“长”,
日期:'数字',
小时:'数字',
分钟:'数字',
})
}
console.log(格式('2021-01-10 12:47:29 UTC'))
//=>2021年1月10日下午2:47
console.log(格式(未定义))
//=>一些回退值
新的API在许多浏览器中获得了更多本机支持,因此它是一个更经得起未来考验的解决方案。正如文档中所建议的,您可以在不完全支持此功能的浏览器中使用。不幸的是,Safari是一款尚未赶上的浏览器

一个简短的片段,以实现您正在寻找的是

new Intl.DateTimeFormat('en-US', { dateStyle: 'long'}).format(new Date("2021-01-10 12:47:29Z"))  // outputs January 10, 2021

请记住,末尾没有
Z
的日期时间字符串将被解析为本地时间
Z
表示提供的日期时间是UTC。

如果您正在搜索矩.js替代方案,我建议。下面是一个比较二者的例子

以下是日期fns的文档

因此,要使用date fns回答您的问题:

format(new Date(video?.createdAt), 'MMMM D, YYYY')

试试这个:
时刻(“2021-01-10 12:47:29 UTC”,“YYYY-MM-DD HH:MM:ssZ”)。格式(“MMMM D,YYYY”)
@RohitKhanna。谢谢显示时间怎么样?我试着显示时间,它错了。它的输出时间是下午12点47分。应该是晚上8点47分<代码>时刻(视频?.createdAt,“YYYY-MM-DD HH:MM:ssZ”)。格式('h:MM A z')在旁注中,时刻被弃用
新日期('2021-01-10 12:47:29'))
会将日期解析为本地时区,而不是UTC这是在Safari浏览器中显示为无效日期这是值实际值不是带有z
2021-01-10 12:47:29 UTC的值显示范围错误:无效时间值表示
TypeError:无法读取未定义的属性“split”
这是实际值值不是z
2021-01-10 12:47:29 UTC的值,它的显示范围错误:无效时间值Safari中预期会出现错误,您可以包括应修补浏览器的。随着时间的推移,当更多浏览器实现此API时,可以删除多边形填充。date-fns很好。由于浏览器差异和不一致,强烈建议“使用
date
构造函数(和
date.parse()
,其工作方式相同)解析日期字符串。”@mtsknn我认为他们不鼓励这样做,因为字符串值没有时区,并且由于本地tz不一致(?)而被不同浏览器区别对待。在OP的情况下,他提供的日期字符串有一个“UTC”,所以应该是好的,对吗?
新日期('2021-01-10 12:47:29 UTC')
产生“无效日期”在Firefox和iOS Safari上。似乎对Chrome有用。对其他浏览器一无所知。