使用bootstrap datepicker进行计算

时间:2015-01-22 15:59:57

标签: twitter-bootstrap datepicker 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()
  3. 必须使用。但是当我尝试

    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/

1 个答案:

答案 0 :(得分:1)

我想我看到了这个问题。这一行:

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

使用.datepicker('getDate')功能错误。当你这样称它时,它试图从HTML表单元素中获取日期值。例如,如果您致电:

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

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

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

正如您所能想象的那样,01-02-2015 undefined不起作用。

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

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