在值日期jquery

时间:2017-04-27 10:31:57

标签: jquery

我正在尝试将注册的结束日期设置为事件开始日期前一天。为此,我正在尝试下面的功能,但结束日仍然是在一天的开始事件中被选中。例如。如果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);

2 个答案:

答案 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/