如何验证其中包含时区的日期字符串的格式?

How can I validate the formate of a date string that has timezone in it?

如果我有这个日期:April 14, 2022 14:00 UTC,我如何验证它在 MMMM DD, YYYY HH:mm <timezone>

我用 moment 试过了,但它没有时区格式。

moment(date, 'MMMM DD, YYYY HH:mm',true).isValid()

如何验证字符串是否为 MMMM DD, YYYY HH:mm <timezone> 格式?

您可以在解析格式中包含“UTC”作为文字文本,例如

let date = 'April 14, 2022 14:00 UTC';

console.log(
  moment(date, 'MMMM DD, YYYY HH:mm[ UTC]',true).isValid()
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>

根据 moment.js documentation,支持各种偏移格式,因此如果有其他偏移表示,您可以使用多个测试来支持说“UTC”和“+00:00”(或±HH:mm一般来说),例如

['April 14, 2022 14:00 UTC',
 'April 14, 2022 14:00 +00:00',
 'April 14, 2022 14:00 +05:30'
 ].forEach(date => 
    console.log(`${date} is valid? ` +
    `${moment(date, 'MMMM DD, YYYY HH:mm[ UTC]', true).isValid() ||
       moment(date, 'MMMM DD, YYYY HH:mm Z', true).isValid()}`
    )
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>

不幸的是 isValid 不支持一次调用多种格式,所以你不能这样做:

moment(date, 'MMMM DD, YYYY HH:mm[ UTC]',  'MMMM DD, YYYY HH:mm Z', true).isValid()

因为只识别第一种格式。