我正在尝试将注册的结束日期设置为事件开始日期前一天。为此,我正在尝试下面的功能,但结束日仍然是在一天的开始事件中被选中。例如。如果event_start_date
是5月1日,那么我希望日期选择器允许event_registration_deadline
max在4月30日,但实际上日期选择器允许选择5月1日但在此之后禁用日期。功能:
if(jQuery( "#event_start_date" ).length > 0)
{
jQuery('input#event_start_date').datepicker({
format : 'yyyy-mm-dd',
autoclose : true,
todayHighlight: true
}).on('changeDate', function(){
var aDayBefore = new Date(jQuery(this).val()-1);
jQuery('#event_registration_deadline').datepicker('setEndDate', aDayBefore);
});
}
我试图通过在以下行代码上设置-1来获得此结果:
var aDayBefore = new Date(jQuery(this).val()-1);
答案 0 :(得分:2)
要在指定日期前一天设置注册结束日期,类似于已经回答的here,您应该这样做:
var aDayBefore = new Date(jQuery(this).val());
aDayBefore.setDate(aDayBefore.getDate()-1);
var FinalDay = new Date(aDayBefore.toLocaleDateString());
现在,FinalDay包含您jQuery(this).val()
给出日期前一天的日期对象。
希望这会有所帮助。
答案 1 :(得分:1)
var aDayBefore = new Date(jQuery(this).val()-1);
假设jQuery(this).val()
是yyyy-mm-dd格式的字符串,则此操作将生成无效的日期对象。您不能简单地从此值中减去1 -
a)它如何知道你想减去1 天?您还没有指定(并且无法指定)任何时间单位。
b)即使从日期中减去1是有意义的,它也有点无关紧要,因为你实际上并没有从Date对象中减去,你要从日期的字符串表示中减去,在您尝试将其解析为日期之前。 jQuery(this).val()
是一个字符串,因此尝试从中减去它是无效的,并且会生成NaN
(不是数字)。
我认为你想要的是:
var aDayBefore = new Date(jQuery(this).val());
aDayBefore.setDate(aDayBefore.getDate()-1);
有关如何正确操作JS日期(以及所涉及的陷阱)的更多信息,请参阅JS日期参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
以下是使用此代码的工作版本:https://jsfiddle.net/rzjd2n90/