ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript和JQuery – 奇怪的新Date()问题

2019-07-26 07:34:25  阅读:209  来源: 互联网

标签:javascript jquery datepicker


我正在使用Keith Wood的jQuery datepicker http://keith-wood.name/datepick.html创建一个日历,用户可以使用该日历在一系列日期之间切换或选择单独的日期.该网站本身可在http://www.hasslers.org查看.

日历工作原理很好,但它在计算天数成本方面存在问题.代码的工作方式是从datepicker中获取一个表示两个日期的字符串,并将它们分成单独的字符串.从那里,字符串信息被转换为表示日,月和年的单独变量.

当我使用警报窗口弹出它们时,变量都显示正确的值.我可以选择几乎任何开始的日子,并使脚本完美地工作;但是,当我选择当前日期或新日期变量设置为10月1日后的第二天.这只发生在当天附近的几天.

我的漫无边际,这里是代码的一部分似乎是麻烦制造者:

    var dates_string = datepicker_data.toString();

    var dates = dates_string.split(',');

    var day1 = dates[0].slice(8, 10);
    var day2 = dates[1].slice(8, 10);

    var month1 = dates[0].slice(4, 7);
    var month2 = dates[1].slice(4, 7);

    switch(month1) {
        case "Jan":
            month1 = 0;
            break;
        case "Feb":
            month1 = 1;
            break;
        case "Mar":
            month1 = 2;
            break;
        case "Aprl":
            month1 = 3;
            break;
        case "May":
            month1 = 4;
            break;
        case "Jun":
            month1 = 5;
            break;
        case "Jul":
            month1 = 6;
            break;
        case "Aug":
            month1 = 7;
            break;
        case "Sep":
            month1 = 8;
            break;
        case "Oct":
            month1 = 9;
            break;
        case "Nov":
            month1 = 10;
            break;
        case "Dec":
            month1 = 11;
            break;
    }

    switch(month2) {
        case "Jan":
            month2 = 0;
            break;
        case "Feb":
            month2 = 1;
            break;
        case "Mar":
            month2 = 2;
            break;
        case "Aprl":
            month2 = 3;
            break;
        case "May":
            month2 = 4;
            break;
        case "Jun":
            month2 = 5;
            break;
        case "Jul":
            month2 = 6;
            break;
        case "Aug":
            month2 = 7;
            break;
        case "Sep":
            month2 = 8;
            break;
        case "Oct":
            month2 = 9;
            break;
        case "Nov":
            month2 = 10;
            break;
        case "Dec":
            month2 = 11;
            break;
    }

    var year1 = dates[0].slice(11, 15);
    var year2 = dates[1].slice(11, 15);

    var split_date1 = new Date();
    var split_date2 = new Date();

    split_date1.setDate(parseInt(day1));
    split_date2.setDate(parseInt(day2));

    split_date1.setMonth(month1);
    split_date2.setMonth(month2);

    split_date1.setYear(parseInt(year1));
    split_date2.setYear(parseInt(year2));

    // get number of days by dividing by 86400000 milliseconds (number in a day)
    number_of_days = ((split_date2 - split_date1) / 86400000) + 1;

解决方法:

您在一个月中使用两位数字:

var day1 = dates[0].slice(8, 10);
var day2 = dates[1].slice(8, 10);

我不知道你的日期是什么格式,但如果第八个代表08,那你就麻烦了. parseInt函数有第二个参数,指定数字的基数;如果你没有指定基数,那么parseInt将不得不猜测,如果你给它一个以零开头的数字,它将猜测八进制.结果是parseInt(’08’)将导致零,因为8不是有效的八进制数字.使用parseInt时应始终指定基数.

今天方便的是8号,所以让我们来看看会发生什么.

var d = new Date();
// Thu Sep 08 2011 20:12:43 GMT-0700 (PDT)
d.setDate(parseInt('08'));
d.toString();
// "Wed Aug 31 2011 20:12:43 GMT-0700 (PDT)"

因此,在尝试将日期设置为8日时,我们会失去一些时间,之后一切都会横向移动.

我不确定这是否是您的具体问题,但这是一个需要修复的令人讨厌的问题.

标签:javascript,jquery,datepicker
来源: https://codeday.me/bug/20190726/1541795.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有