我的代码是这样的javascript:
$(function () {
$('#datepicker').datetimepicker({
minDate: moment().startOf('day')
}).on('dp.change', function(e){
if( e.date && e.date.isSame(moment(), 'd') ){
var min = moment().startOf('minute').add(300, 'm');
$('#timepicker').data("DateTimePicker").minDate(min);
} else {
$('#timepicker').data("DateTimePicker").minDate(false);
}
});
$('#timepicker').datetimepicker({
minDate: moment().startOf('minute').add(300, 'm'),
});
});
演示和完整代码如下:https://jsfiddle.net/tyvetr5h/
我的问题:
例如现在8月16日晚上9点。由于看来显示的日期是8月17日凌晨2点。但我的代码是8月16日凌晨2点
我该如何解决?
我尝试像这样更新一天:
minDate: moment().startOf('day').add(300, 'm')
但它是一样的
答案 0 :(得分:1)
在实例化时,您必须将300分钟添加到DP mindate
。从这个"时刻"是当前时间和日期,与添加它有关。
我和你的时区不一样,所以我必须加上超过300分钟才能让它明天落下......但这是你的updated Fiddle。我删除了所有.startOf()
,我认为这与您尝试实现的目标无关。
修改强>
我找到了诀窍。
事情就是你改变了时刻价值...所以当是时候比较日期时,最好用" Unix格式",这是从1970年1月1日起的毫秒......
这个长整数并不关心日变化。因此,如果时间是从现在开始的300分钟,则比较容易(和防错)。
$(function () {
console.clear();
$('#datepicker').datetimepicker({
minDate: moment().add(300, 'm').startOf("day")
})
.val(moment().add(300, 'm').format("DD-MM-YYYY")) // To set correct "valid" date from start
.on('dp.change', function(e){
var now = moment().format("X");
//console.log(e.date.format("X"));
//console.log(now);
// Comparing selected date (moment object) in milliseconds
if(e.date.format("X")+(300*60*1000) > now ){
console.log("above 5 hours, unlocking time.");
$('#timepicker').data("DateTimePicker").minDate(false);
}else{
console.log("below 5 hours, locking time (and probably resetting the value to min...)");
$('#timepicker').data("DateTimePicker").minDate(moment().add(300, 'm'));
}
});
$('#timepicker').datetimepicker({
minDate: moment().add(300, 'm'),
});
});