2016-07-27 150 views
1

从datepicker转换为moment.js的问题在SO中已经出现了很多次。可悲的是,在尝试了我在这里以及在线发现的各种方法提出的10种不同解决方案之后,我仍然无法以我想要的方式将datepicker成功转换为moment.js。将日期字符串dd-mm-yy转换为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); 

我想2天例如递增从日期选择的日期,也就是从“27-去7-2016“改为”29-7-2016“,使用我找到的2天差距。 到目前为止,这一直导致无论我得到一个整个moment.js对象,或一些错误,如无效,或方法不起作用等等。

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

谢谢。

回答

1

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">

+0

谢谢!这真的澄清了事情。我认为这个问题是由于Now没有创建一个时刻对象。 –