使用 bootstrap 日期选择器进行计算

Do calculations with bootstrap datepicker

在我的网页中,我有一些日期字段,它们被分配了 Bootstrap datepicker。在 javascript 函数中,我需要获取名为 onBookingDate 的字段的日期。我可以这样得到它。

var on_BookingDate =  jQuery('#datepick_onBooking').val();

然后我需要添加 8 个月,然后将新日期值与使用上述方法检索的另一个日期值进行比较。这是我使用的代码。 (所有日期的格式都是dd-mm-yyyy)

var on_BookingDate =  jQuery('#datepick_onBooking').val();
var dateArray = on_BookingDate.split("-");
//dateArray[1] contains the month value

var dateObj = new Date(dateArray[2], dateArray[1] - 1, dateArray[0]);
dateObj.setMonth(dateObj.getMonth() + 8);
var intFreeLastDate = dateObj.getDate() + "-" + (dateObj.getMonth() + 1) + "-" + dateObj.getFullYear();

为了比较日期,它们必须是时间值。为此

  1. .datepicker('getDate')
  2. getTime()

必须使用。但是当我尝试

var int_free_last_date = intFreeLastDate.datepicker('getDate');
alert("int free last date get date = "+int_free_last_date);

我收到以下错误,

Uncaught TypeError: undefined is not a function

这是为什么?以及如何解决这个问题。日期格式的 int_free_last_date 不是必须的吗??

JS FIddle http://jsfiddle.net/Lnmvc5ao/

我想我明白了。这一行:

var int_free_last_date = intFreeLastDate.datepicker('getDate');

使用 .datepicker('getDate') 函数有误。当您这样称呼它时,它会尝试从 HTML 表单元素中获取日期值。例如,如果您调用:

jQuery('#datepick_onBooking').datepicker('getDate');

它将 return ('#datepick_onBooking') 元素的日期选择器中存在的日期值。如果 intLastFreeDate 类似于 01-02-2015,该行将等同于:

var int_free_last_date = 01-02-2015.datepicker('getDate');

正如您想象的那样,它不起作用,因为 01-02-2015undefined

我认为您已经接近您的解决方案,您只需要将已经存在的日期格式化为时间值并进行比较:

var on_BookingDateTime = on_BookingDate.getTime();
var lastFreeDateTime = intLastFreeDate.getTime();
// Compare em however you would.

希望对您有所帮助!

编辑

由于 on_BookingDateintFreeLastDate 都是有效的日期字符串 dd-mm-yyyy,您可以将它们拆分为 - 并从中创建一个 date 对象它们,然后对这些对象调用 getTime(),然后进行比较。

var temp1= on_BookingDate.split("-"); 
var temp2 = intFreeLastDate.split("-");
// [0] is day, [1] is month, [2] is year.

var date1 = new Date(temp1[2], (temp1[1] - 1), temp1[0]);
var date2 = new Date(temp2[2], (temp2[1] - 1), temp2[0]);

var time1 = date1.getTime();
var time2 = date2.getTime();

// Then compare them!

JSFiddle Update