javascript - Moment.js 在未来日期的情况下会错误地转换日期

标签 javascript json momentjs

我正在使用 moment.js 来比较 javascript 代码中的两个日期。 输入值从 JSON 字符串传递。

当我提供日期 21/01/2050 00:00(MM/DD/YYYY HH:mm 格式)时,结果日期显示为 21/1/1950 00:00。 我尝试使用以下选项:

  1. moment(item["结束日期"]).utc().format()
  2. moment(item["开始日期"]).format('MM/DD/YYYY HH:mm')
  3. moment(new Date(item["开始日期"])).format('MM/DD/YYYY HH:mm')

但是这些仍然给我提供了 1950 年而不是 2050 年。

有没有办法正确格式化这个?

最佳答案

由于您的输入不是 moment(String) 识别的 ISO 8601 或 RFC 2822 格式

When creating a moment from a string, we first check if the string matches known ISO 8601 formats, we then check if the string matches the RFC 2822 Date time format before dropping to the fall back of new Date(string) if a known format is not found.

警告:浏览器对解析字符串的支持不一致。由于没有规定应支持哪些格式,因此在某些浏览器中有效的内容在其他浏览器中将无效。

为了获得解析 ISO 8601 字符串以外的任何内容的一致结果,您应该使用 String + Format .

所以你必须使用moment(String, String) ,传递 'DD/MM/YYYY HH:mm' 作为第二个参数。

这是一个实时示例:

var input = "21/01/2050 00:00";
console.log( moment(input, 'DD/MM/YYYY HH:mm').format('MM/DD/YYYY HH:mm') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>

关于javascript - Moment.js 在未来日期的情况下会错误地转换日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624127/

相关文章:

java - 测试正确 JSON 序列化的最佳方法

java - 使用 Jackson 将 Spring 3 ArrayList 序列化为 JSON 而无需包装到对象(无名称)

Javascript时刻日期转换和格式问题

javascript - 模拟人类点击并在下拉菜单中选择

javascript - Vue 3 : How to update component props value correctly using composition api?

javascript - 使用 knockout.js 更新所选内容中的 div

javascript - 无法将 json 转换为 javascript 对象/数组

javascript - 如何使用 moment.js 将 JS Date 解析为特定格式

javascript - 仅使用 Moment JS 将 Microsoft JSON 日期转换为本地日期时间

javascript - 从 &lt;input&gt; 值设置变量