【问题标题】:Convert date string dd-mm-yy to moment.js valid date将日期字符串 dd-mm-yy 转换为 moment.js 有效日期
【发布时间】:2016-07-27 10:54:58
【问题描述】:

从 datepicker 转换为 moment.js 的问题在 SO 中出现了很多次。可悲的是,在尝试了我在这里和在线找到的各种方法提出的大约 10 种不同的解决方案之后,我仍然无法以我想要的方式成功地从 datepicker 转换为 moment.js。

我所做的是在 jQuery datepicker 中获取选定的日期,在这种情况下,console.log 最后并获取“27-7-2016”,例如,作为 datepicker 日期。

$( "#datepicker" ).datepicker({
    dateFormat: "dd-mm-yy",
    maxDate: 6,
    minDate: 0,
    onSelect: function(dateText){
        startDate = dateText;
        selectedTemp = dateText.split("-");
        gap = moment(selectedTemp[2]+"-"+selectedTemp[1]+"-"+selectedTemp[0]).fromNow();'

        console.log(startDate);
   }
});

gap 变量中,我有一个moment 对象,它给了我类似“10 小时内”或“2 天内”的信息。我稍后将该字符串解析为一个数字,以了解所选日期将是多少天:

gap = parseInt(gap);

例如,我想将 datepicker 中的日期增加 2 天,即使用我发现的 2 天间隔从“27-7-2016”变为“29-7-2016”。 到目前为止,这总是导致我得到一个完整的 moment.js 对象,或者一些错误,例如无效,或者 .add() 方法不起作用等等。

我也想获取结果“29-7-2016”并将其转换为“2016-7-29”,但由于它不是字符串,所以我找不到这样做的方法,并且总是遇到格式问题。

谢谢。

【问题讨论】:

    标签: jquery date datepicker momentjs


    【解决方案1】:

    fromNow() 方法返回一个字符串,而不是一个时刻对象。如果您想计算现在与所选日期之间的差异,您可以使用diff

    你有一个moment对象,你可以使用add来修改它。注意add 修改矩原始对象。

    使用format,您可以获得一个字符串,该字符串以您喜欢的格式表示时刻对象。

    希望以下示例有助于您了解如何使用矩:

    $( "#datepicker" ).datepicker({
       dateFormat: "dd-mm-yy",
       maxDate: 6,
       minDate: 0,
       onSelect: function(dateText){
         // Parse the selected string into moment object
         var momDate = moment(dateText, 'DD-MM-YYYY');
         // Get gap string
         // gap can be something like 'in 10 hours'
         var gap = momDate.fromNow();
         // Get difference as integer
         var gapInt = momDate.diff(moment().startOf('d'), 'd');
         
         // Here you can use add() to modify you moment object
         momDate.add(gapInt, 'days');
         
         // Get date formatted as you like
         var dateFormatted = momDate.format('YYYY-M-DD');
         console.log(dateFormatted);
       }
     });
    <link href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet"/>
    
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
    
    <input id="datepicker" type="text">

    【讨论】:

    • 谢谢!这真的澄清了事情。我认为问题在于 fromNow 没有创建时刻对象。
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2019-07-06
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多