在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”,但由于它不是一个字符串我找不到办法做到这一点,并且总是遇到格式化问题。
感谢。
答案 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">