如何在 datetimepicker 中添加基于小时的最少天数?
How can I add a minimum of days based on hour in datetimepicker?
我的代码 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')
但都一样
实例化时也必须将 300 分钟添加到 DP mindate
。由于这个 "moment" 是当前时间和日期,因此添加它是相关的。
我和你不在同一个时区,所以我不得不加了 300 多分钟才能让它在明天...但是这是你的 updated Fiddle. I removed all .startOf()
,我认为这与什么无关你努力实现。
编辑
我找到诀窍了。
问题是你改变了时刻值...所以当需要比较日期时,最好在 "Unix format" 中进行,这是从 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'),
});
});
我的代码 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')
但都一样
实例化时也必须将 300 分钟添加到 DP mindate
。由于这个 "moment" 是当前时间和日期,因此添加它是相关的。
我和你不在同一个时区,所以我不得不加了 300 多分钟才能让它在明天...但是这是你的 updated Fiddle. I removed all .startOf()
,我认为这与什么无关你努力实现。
编辑
我找到诀窍了。
问题是你改变了时刻值...所以当需要比较日期时,最好在 "Unix format" 中进行,这是从 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'),
});
});