我有一个日期字符串,如下所示,即 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
请指出我做错了什么。
正如@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>