javascript - 如何使用 jQuery ui datepicker 计算从今天开始的天数?

标签 javascript jquery jquery-ui date jquery-ui-datepicker

你好,

从 jQuery 日期选择器中选择一个日期后,我在计算从现在到选定日期的天数时遇到了一些麻烦。

我认为日期选择器正在更改选择日期的日期格式并导致计算出错,但我不太清楚如何解决这个问题。我确定是我,但我只见树木不见森林,所以任何建议都会非常有帮助。

代码如下:

<input type="text" class="datepicker-calc" />
<input type="text" id="tbAddDays" />
$(document).ready(function () {
    $(".datepicker-calc").datepicker({
        dateFormat: "dd/mm/yy",
        changeMonth: true,
        changeYear: true,
        onSelect: function (date, e) {
            var expDate = new Date(date);
            var date = e.selectedDay;
            if (date < 10) {
                date = ("0" + e.selectedDay)
            }
            var month = e.selectedMonth;
            if (month < 10) {
                month = ("0" + e.selectedMonth)
            }
            var year = e.selectedYear;
            var endDate = month + "/" + date + "/" + year;
            updateDays(endDate, e);
            $(".datepicker-calc").datepicker("hide");
        }
    });

    function treatAsUTC(date) {
        var result = new Date(date);
        result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
        return result;
    }

    function updateDays(expDate, e) {
        var now = new Date();
        var startDate = now.toDateString('dd/MM/yyyy');
        var exp = new Date(expDate);
        var endDate = exp.toDateString('dd/MM/yyyy');
        var millisecondsPerDay = 24 * 60 * 60 * 1000;
        var totalDays = (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
        $('#tbAddDays').val(totalDays);
    }
});

最佳答案

onSelect 事件会收到指定格式的字符串,即dd/mm/yy。 JavaScript Date.parse 方法将错误地解析这些日期,或者根本不解析它们。解决方案是使用 parseDate()内置于 jQuery ui 中的函数:

onSelect: function (dateText, inst) {
  var expDate = $.datepicker.parseDate(inst.settings.dateFormat, dateText, inst.settings);
  var diff = expDate - new Date();
  var days = diff / 1000 / 60 / 60 / 24;
  alert( /* ceil, floor, round */ days);
}

关于javascript - 如何使用 jQuery ui datepicker 计算从今天开始的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267832/

相关文章:

javascript - 登录成功后获取cookie?

JavaScript 全局变量不更新值

javascript - 如果我放置日期选择器函数,数据表根本不起作用

javascript - 简单的 Javascript 问题

javascript - 如何使用 jquery 动态添加特定 div 中的元素。我要添加评论

jquery - 我正在尝试使用 jQuery 更改背景图像,它可以在我的本地机器上使用,但不能用于在线服务

jquery - 为什么传递给闭包的对象的更改会保留在全局范围内?

javascript - jQuery,数据表转换单元格

javascript - jQuery tabs "add"方法创建两个 <div> 元素

jquery - 使用所选对象的选项动态创建 div