Javascript 日期选取器将日期取消一天

Javascript 日期选取器将日期取消一天,javascript,datepicker,Javascript,Datepicker,日期选取器返回的日期被取消一天。这是我的代码中的一个问题还是一个bug 发送至日期选择器的日期为2012-03-21。datepicker返回的日期为2012年3月20日星期二 var end_date = end_calendar.getFormatedDate("%Y-%m-%d"); end_date = $.datepicker.formatDate('D M dd yy', new Date(end_date)); 检查.getFormattedDate的拼写,并将其

日期选取器返回的日期被取消一天。这是我的代码中的一个问题还是一个bug

发送至日期选择器的日期为2012-03-21。datepicker返回的日期为2012年3月20日星期二

    var end_date = end_calendar.getFormatedDate("%Y-%m-%d");
    end_date = $.datepicker.formatDate('D M dd yy', new Date(end_date));

检查
.getFormattedDate
的拼写,并将其更改为
.getFormattedDate

这是一个很小的改变,但是调整一下,看看是否有固定结果。

它不是日期选择器

console.log(new Date('2012-03-21')); //prints Tue Mar 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)
Javascript对象可以接受以下语法之一:

new Date (2012, 2, 21). 
  • 新日期()
  • 新日期(毫秒)
  • 新日期(日期字符串)
  • 新日期(年、月、日[、小时、分钟、秒、毫秒])
  • 因此,在您的例子中,它将调用dateString和。因此,请尝试按以下方式添加时间

    new Date ('2012-03-21T00:00:00') //should return you Wed Mar 21 2012
    

    或者最好按以下方式使用

    new Date (2012, 2, 21). 
    
    年份-表示年份的整数值。为了兼容性(为了避免Y2K问题),您应该始终指定完整的年份;使用1998年,而不是98年

    月份表示月份的整数值,从1月的0开始到12月的11


    -表示月中某一天(1-31)的整数值

    似乎是个bug。如果发送到日期()的字符串格式为2012/03/21而不是2012-03-21。日期似乎是对的。

    您可以将差异添加到日期中,这基本上将忽略任何时区

    d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
    

    我不知道为什么会这样,但我发现使用斜杠还是破折号会影响答案。看一看

    new Date ('2012/03/21'); // returns: "Wed Mar 21 2012 00:00:00 GMT-0500 (CDT)"
    new Date ('2012-03-21'); // returns: "Tue Mar 20 2012 19:00:00 GMT-0500 (CDT)" WHA!
    
    所以为了解决我的问题,我在输入日期做了一个简单的正则表达式,总是用正斜杠替换前三个破折号

    var strInputValue = control.value, // <-- get my date string
        dteCurrent;
    
    strInputValue = strInputValue.replace(/-/, '/')  // replace 1st "-" with "/"
                                 .replace(/-/, '/'); // replace 2nd "-" with "/"
    
    dteCurrent = new Date(strInputValue);
    

    var strInputValue=control.value,//这是由于时区与日期格式的差异造成的-yyyy-mm-dd

    new Date ('2015/07/10'); // returns: "Fri Jul 10 2015 00:00:00 GMT-0700 (Pacific Daylight Time)"
    
    new Date ('2012-07-10'); // returns: "Thu Jul 09 2015 17:00:00 GMT-0700 (Pacific Daylight Time)" 
    
    yyyy/mm/dd
    -在计算本地时间时没有考虑时区。但是
    yyyy-mm-dd
    -在java脚本日期函数中计算本地时间时考虑时间。
    当客户端(浏览器)和服务器时区不同且时区/日期相差1天时,这可以重现


    您可以在您的机器上尝试将时间更改为不同的时区,其中时间间隔b/w应大于等于12小时。

    我没有评论的名声,但Venu M给了我很好的洞察力。我的项目也有同样的问题,根据日期输入的语法,日期返回为输入或关闭一天。展开并查看完整日期格式,我的不同输入日期格式返回UTC或我的本地时区,具体取决于语法。我正在使用MomentJS解析我的日期,然后返回一个日期对象,以便使用Breeze进行验证。我有一个输入模式或一个要编辑的表,所以现在我需要确保对它们进行相同的分析和验证。我建议验证您的日期对象是否以相同的方式创建,而不管其输入语法或输入位置如何。

    在遇到相同问题并登录到此页面后,在我的情况下,它是由日期的无效标签引起的。我星期一开始工作,而不是星期天。我希望这对某人有所帮助。

    在尝试了许多解决方案后,以下代码适用于我,源于()

    var myDate = $.datepicker.parseDate("yy-mm-dd", "2013-10-21");
    ..//do whatever with myDate now
    

    这不是一个bug,但绝对令人困惑

    本页上的大多数答案都很混乱,并且包含一些错误信息

    真正的问题在于javascript
    Date
    对象如何解析日期字符串

    我找到的最好的答案是。看看它的精彩评论

    下面是对上述答案的一个非常中肯的评论。(信用证:@Mizstik)

    所有这些都是由于底层Date.parse()试图遵循ISO 8601的行为造成的。当日期字符串遵循yyyy-mm-dd格式时,假定它是ISO 8601,隐含UTC 00:00。当字符串偏离格式时(例如,mm-dd-yyy或斜杠代替连字符),它会根据RFC 2822返回到更松散的解析器,该解析器在缺少时区时使用本地时间。诚然,对于一个普通人来说,这一切都是相当神秘的


    试试这个,

    ranges": {
        'Today': [moment().hours(0).minutes(0).seconds(0).milliseconds(0), moment().hours(23).minutes(59).seconds(59).milliseconds(999)],
        'Yesterday': [moment().subtract(1, 'days').hours(0).minutes(0).seconds(0).milliseconds(0), moment().subtract(1, 'days').hours(23).minutes(59).seconds(59).milliseconds(999)],
        'Last 7 Days': [moment().subtract(6, 'days').hours(0).minutes(0).seconds(0).milliseconds(0), moment().hours(23).minutes(59).seconds(59).milliseconds(999)],
        'Last 30 Days': [moment().subtract(29, 'days').hours(0).minutes(0).seconds(0).milliseconds(0), moment().hours(23).minutes(59).seconds(59).milliseconds(999)],
        'This Month': [moment().startOf('month').hours(0).minutes(0).seconds(0).milliseconds(0), moment().endOf('month').hours(23).minutes(59).seconds(59).milliseconds(999)],
        'Last Month': [moment().subtract(1, 'month').startOf('month').hours(0).minutes(0).seconds(0).milliseconds(0), moment().subtract(1, 'month').endOf('month').hours(23).minutes(59).seconds(59).milliseconds(999)]
    },
    
    范围“:{ “今天”:[矩().hours(0).分(0).秒(0).毫秒(0),矩().hours(23).分(59).秒(59).毫秒(999)], “昨天”:[moment().减去(1,'天').小时(0).分钟(0).秒(0).毫秒(0),moment().减去(1,'天').小时(23).分钟(59).秒(59).毫秒(999)], “过去7天”:[力矩().减去(6,'天').小时(0).分钟(0).秒(0).毫秒(0),力矩().小时(23).分钟(59).秒(59).毫秒(999)], “过去30天”:[力矩().减去(29,'天').小时(0).分钟(0).秒(0).毫秒(0),力矩().小时(23).分钟(59).秒(59).毫秒(999)], “本月”:[矩().startOf('Month')。小时(0)。分钟(0)。秒(0)。毫秒(0),矩().endOf('Month')。小时(23)。分钟(59)。秒(59)。毫秒(999)], ‘上个月’:[moment().subtract(1,'Month').startOf('Month').hours(0).minutes(0).seconds(0).毫秒(0),moment().subtract(1,'Month').endOf('Month').hours(23).分(59).秒(59).毫秒(999)]
    },

    如前所述,Javascript January等于0,因此这适用于日期选择器或输入类型date

     end_date = end_date.split('-');
     end_date = new Date(end_date[0],Number(end_date[1])-1,end_date[2]);
    


    为了避免休息一天,我在创建日期变量时用/using.replace()替换了-

    var startDate = new Date(data[3].replace(/-/g, '\/'));
    

    你确定这和日期采集器有关吗?
    文档。写(新日期('2012-03-21'))
    打印
    2012年3月20日星期二20:00:00 GMT-0400(东部夏令时)
    对我来说。闰年错误?也与格式有关,检查这个:传递
    2012-03-21
    2012/03/21
    Date()
    给出的结果相隔4小时。没错。新日期(“…”)的间隔为一天。这一定是日期()的错误。2012/03/21似乎比20更正确