[英]How to convert string date to specific format?
我正在尝试从特定格式的字符串中获取日期,例如:
const format = 'MM/dd/yyyy HH:mm'; const dt = "2021-03-11T22:00:00.000Z"; // expecting "03/11/2021 22:00" console.log(moment(dt).format(format)); // but getting "03/Th/yyyy 23:00"
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
我尝试了 js date、moment、luxon,但我不明白如何做到这一点:(
我怀疑000Z
出了问题,但这是我得到的日期。
Moment.js 和 Luxon 的区别在于格式键的大小写。 请查看密钥/令牌表。
注意: Moment.js 已被弃用,取而代之的是团队的新库 Luxon 和ECMA-402中引入的其他 ECMA 脚本标准。 如果您现在正在考虑使用 Moment.js,只需切换到 Luxon。
如果您使用的是 Luxon,则可以在格式化日期之前调用.toUTC()
。 确保您的日期 ( dd
) 和年份 ( yyyy
) 格式键是小写的。
const DateTime = luxon.DateTime; const format = 'MM/dd/yyyy HH:mm', dt = "2021-03-11T22:00:00.000Z"; console.log(DateTime.fromISO(dt).toUTC().toFormat(format)); // 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.26.0/luxon.min.js"></script>
如果您使用 Moment.js,您可以在格式化日期之前调用.utc()
。 确保您的日期 ( DD
) 和年份 ( YYYY
) 格式键是大写的。
const format = 'MM/DD/YYYY HH:mm', dt = "2021-03-11T22:00:00.000Z"; console.log(moment(dt).utc().format(format)); // 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
您的格式字符串错误,应该是: 'MM/DD/YYYY HH:mm'
。
然后,如果您的日期带有':000Z'
,则应使用substring()
方法将其删除。
工作代码:
const format = 'MM/DD/YYYY HH:mm'; const dateString = "2021-03-11T22:00:00:000Z"; const date = dateString.substring(0, dateString.length - 5); console.log(moment(date).format(format)); // prints 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
您需要使用YYYY
而不是yyyy
和DD
而不是dd
以获得预期的结果。
顺便说一句,我建议使用 Moment 以外的另一个库,例如 dayjs。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.