将日期字符串dd-mm-yy转换为moment.js有效日期

时间:2016-07-27 10:54:58

标签: jquery date datepicker momentjs

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

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

$( "#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变量中,我有一个时刻对象给我一些类似“在10小时内”或“在2天内”的内容。我稍后将该字符串解析为一个数字,以了解所选日期的天数:

gap = parseInt(gap);

我想将datepicker的日期增加2天,例如,使用我找到的2天差距,从“27-7-2016”到“29-7-2016”。 到目前为止,这总是导致我得到整个时刻.js对象,或者某些错误,例如无效,或者.add()方法不起作用等等。

我也想把结果“29-7-2016”并将其转换为“2016-7-29”,但由于它不是一个字符串我找不到办法做到这一点,并且总是遇到格式化问题。

感谢。

1 个答案:

答案 0 :(得分:2)

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

您有一个时刻对象,您可以使用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">