MomentJS 日期格式返回奇怪的值

问题描述 投票:0回答:1

我有一个日期字符串,如下所示,即 startDate =“02-05-2024”

现在,我希望将此日期格式化为以下格式(以字符串形式返回到某个 API 端点)

YYYY-MM-DDTHH:mm:ss.SSS[Z]

我正在尝试做以下事情

moment(startDate, 'YYYY-MM-DDTHH:mm:ss.SSS[Z]').format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')

但是我在执行上述操作时看到了奇怪的值

2002-05-21T00:00:00.000Z

我想要的输出是

2024-05-02T00:00:00.000Z

请指出我做错了什么。

javascript momentjs moment-timezone
1个回答
0
投票

正如@CBroe提到的,

moment
构造函数的第二个参数是输入的格式,而不是输出(在我们的例子中是
startDate
),输出格式将作为参数传递给
format
功能。

当您将

YYYY-MM-DDTHH:mm:ss.SSS[Z]
作为格式传递给输入时,
moment
会误解日期,例如

YYYY
(年份)是从前四个字符 02-0 解释的,这作为年份没有意义,但 Moment.js 尝试通过采用 2002 来处理它(由于 YYYY 预期的填充,将 02 解释为 2002) .

MM
(月份)取自第一个破折号后的接下来的两个字符,即 5-。 Moment.js 将 5 解释为 May (05)。

第二个破折号之后预计会出现

DD
(日),这会从字符串“2024”中得出 2024。因此,它将 21 视为一天,将 2024 拆分为 21 和 04,其中 04 被忽略,因为格式字符串在一天之后没有地方可以容纳它。

哪个结果

2002-05-21

const startDate = "02-05-2024";
const formattedDate = moment(startDate, "DD-MM-YYYY").format('YYYY-MM-DDTHH:mm:ss.SSS[Z]');

console.log(formattedDate)
<script src="https://cdn.jsdelivr.net/npm/moment/moment.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.