【问题标题】:Moment.js adds 5 yearsMoment.js 增加了 5 年
【发布时间】:2015-03-24 09:09:43
【问题描述】:

我有一个开始时间和结束时间,这是从 fullCalendar 拖动事件传递给表单的。 我需要能够通过文本框更改开始/结束时间。

功能:

$("#startt").on("change", function() {
    console.log("CH")
    $("#phpstart").val(
        moment($("#phpstart").val(), "YY-MM-DD HH:mm:ss").format("YYYY-MM-DD") +
        " " +
        moment($(this).val(), "HH:mm").format("HH:mm:ss"))
})

第一次更改后,一切正常。但是在第二次更改之后,我得到了 + 5 年。 图片: http://p1.pichost.me/i/73/1975986.png

更新 错误在

format("YYYY-MM-DD")

+5 变化发生,当 YY 被格式化为 YYYY,函数第二次触发后

【问题讨论】:

  • 那么,你有答案了吗?
  • 如果您已将问题与脚本中的错误隔离开来,那么在库的 github 页面上设置问题可能会有所帮助。一定要包含重现的步骤,一个 jsfiddle 也很棒。
  • 听起来$('#phpstart').val() 不是YY-MM-DD HH:mm:ss
  • 是的,也许将当年的 20xx 读作 xx15 部分,因此获得 5 年。
  • 这不是库中的错误,您的逻辑很糟糕,请参阅下面的答案。

标签: javascript jquery jquery-ui fullcalendar momentjs


【解决方案1】:

您的代码显示$('#phpstart').val() 的格式应为YY-MM-DD HH:mm:ss

moment($("#phpstart").val(), "YY-MM-DD HH:mm:ss")

但是你在这里将$('#phpstart').val() 设置为YYYY-MM-DD HH:mm:ss 的格式:

$('#phpstart.val(
        moment($("#phpstart").val(), "YY-MM-DD HH:mm:ss").format("YYYY-MM-DD") +
        " " +
        moment($(this).val(), "HH:mm").format("HH:mm:ss"))
);

这就是它崩溃的原因,特别是在第一次更改之后。始终保持一致的格式,以便$('#phpstart').val() 中的日期格式始终相同。

【讨论】:

  • 是的,经过实验,我有点想通了!但无论如何,为什么还要+5
  • 因为你告诉momentjs 一个看起来像2015-01-01 12:00:00 的日期是YY-MM-DD HH:mm:ss 格式,而momentjs 试图解析它。你可以想象它把2015读成20(因为它只需要一个两位数的年份),当它只需要一个两位数的年份时,它会认为这两位数是最后两位数,并自动将第一个数字放在前面本世纪的两位数 - 因此,202015 变为 2020。让我们明确一点,这不是momentjs 逻辑中的错误,您告诉它期望什么,然后给它其他东西。
  • 谢谢你,我明白了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多