datepicker约会一天

use*_*527 44 javascript datepicker

日期选择器返回的日期为一天.这是我的代码中的问题还是一个错误?

发送到date_picker的日期是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));
Run Code Online (Sandbox Code Playgroud)

Sel*_*gam 26

它不是日期选择器,

console.log(new Date('2012-03-21')); //prints Tue Mar 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)
Run Code Online (Sandbox Code Playgroud)

Javascript Date对象可以接受以下语法之一,如下所示,

  1. 新日期()
  2. 新日期(毫秒)
  3. 新日期(dateString)
  4. 新日期(年,月,日[,小时,分钟,秒,毫秒])

所以在你的情况下,它将调用dateString并解析.所以尝试将时间添加如下,

new Date ('2012-03-21T00:00:00') //should return you Wed Mar 21 2012
Run Code Online (Sandbox Code Playgroud)

DEMO

或者更好地使用如下,

new Date (2012, 2, 21). 
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @Madmartigan我正在努力了解自己.似乎新的日期('2012-03-21T00:00:00')产生与新日期('2012/03/21')相同的结果.但是如果使用/默认时间到00:00:00,我没有解释 (2认同)
  • `new Date('2012-03-21T00:00:00')`返回`Tue Mar 20 2012 20:00:00 GMT-0400(EDT) (2认同)

use*_*527 20

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


jer*_*ran 13

You can add the difference to the date which will essentially ignore whatever the timezone is.

d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答帮助,在这里http://stackoverflow.com/questions/32469269/javascript-date-give-wrong-date-off-by-one-hour一小时,我只使用减号-,我使用当前时间来获取时间像这样的区域偏移量d.setTime(d.getTime()-new Date()。getTimezoneOffset()* 60 * 1000);` (2认同)

Dav*_*vid 13

这不是一个错误,但绝对令人困惑.

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

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

我找到的最佳答案是这个堆栈O答案.看看它的优秀写作.

以下是上述答案中非常相关的评论.(信用:@Mizstik)

所有这一切都是由于基础Date.parse()试图遵循ISO 8601的行为.当日期字符串遵循yyyy-mm-dd格式时,它假定为ISO 8601,隐式UTC为00:00.当字符串偏离格式(例如mm-dd-yyyy或斜线而不是连字符)时,它会根据RFC 2822回退到更宽松的解析器,RFC 2822在没有时区时使用本地时间.不可否认,这对普通人来说都是非常神秘的.


Mic*_*ael 8

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

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!
Run Code Online (Sandbox Code Playgroud)

所以为了解决我的问题,我在输入日期做了一个简单的正则表达式,总是用正斜杠替换前三个破折号.

var strInputValue = control.value, // <-- get my date string
    dteCurrent;

strInputValue = strInputValue.replace(/-/, '/')  // replace 1st "-" with "/"
                             .replace(/-/, '/'); // replace 2nd "-" with "/"

dteCurrent = new Date(strInputValue);
Run Code Online (Sandbox Code Playgroud)

我做了一个非常快速的谷歌搜索,为什么会发生这种情况,没有答案.但这应该可以解决您的问题.所有你需要做的就是用正斜杠替换破折号,然后再将它们传递到你想要的位置.

编辑:对不起我在发布之前没有注意到已经接受的答案,请忽略这个答案.


Ven*_*adi 7

由于时区与日期格式为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)" 
Run Code Online (Sandbox Code Playgroud)

yyyy/mm/dd -在计算本地时间时未考虑时区。
yyyy-mm-dd时间时 -在Java脚本日期函数中在计算本地时间时正在考虑时间。
当客户端(浏览器)和服务器时区不同并且时区/日期相差1天时,这可以重现。

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