使用moments.js的日期格式

时间:2019-07-04 09:10:06

标签: javascript momentjs

this.state.date = "20190704153907"   
 moment(this.state.date).format("DD MMMM YYYY hh:mm:ss")

我收到无效日期

我尝试以不同的格式显示相同的内容

预期输出:

4 July 2019 15:39:07

2 个答案:

答案 0 :(得分:0)

您的日期确实无效。 Check the parsing docs

您可以尝试通过正则表达式对其进行修改,以匹配已知的日期格式或等效形式。

答案 1 :(得分:0)

如果您在控制台中查看,则会收到来自Moment的警告:

  

弃用警告:提供的值不是公认的RFC2822或ISO格式。此刻的构建工作归结于js Date(),它在所有浏览器和版本之间都不可靠。不建议使用非RFC2822 / ISO日期格式,并将在即将发布的主要版本中将其删除。有关更多信息,请参阅http://momentjs.com/guides/#/warnings/js-date/

您用于日期字符串的格式不是ISO格式,并且“特定于实现的启发式或特定于实现的日期格式” ¹可能不支持允许JavaScript引擎猜测您的意思。

解决方案是tell Moment the format

const date = "20190704153907";
const m = moment(date, "YYYYMMDDHHmmss");
console.log(m.format("DD MMMM YYYY hh:mm:ss"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

请注意,它将输出04,而不是您的预期输出中的4。如果您想用4代替04,请删除D字符串中的format之一(例如.format(..., "D MMMM YYYY hh:mm:ss")):

const date = "20190704153907";
const m = moment(date, "YYYYMMDDHHmmss");
console.log(m.format("D MMMM YYYY hh:mm:ss"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>


¹https://tc39.es/ecma262/#sec-date.parse