如何将字符串日期转换为特定格式?
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 的区别在于格式键的大小写。请查看 key/token 表格。
注:Moment.js已deprecated in favor of the team's newer library Luxon and other ECMA Script standards that are being introduced in ECMA-402。如果您现在正在考虑使用 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>
您需要使用 YYYY
而不是 yyyy
和 DD
而不是 dd
才能获得预期的结果。
顺便说一下,我建议 using another library than Moment,例如 dayjs。
你的格式字符串有误,应该是:'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>
我正在尝试从特定格式的字符串中获取日期,例如:
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 的区别在于格式键的大小写。请查看 key/token 表格。
注:Moment.js已deprecated in favor of the team's newer library Luxon and other ECMA Script standards that are being introduced in ECMA-402。如果您现在正在考虑使用 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>
您需要使用 YYYY
而不是 yyyy
和 DD
而不是 dd
才能获得预期的结果。
顺便说一下,我建议 using another library than Moment,例如 dayjs。
你的格式字符串有误,应该是:'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>