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对象可以接受以下语法之一,如下所示,
所以在你的情况下,它将调用dateString并解析.所以尝试将时间添加如下,
new Date ('2012-03-21T00:00:00') //should return you Wed Mar 21 2012
Run Code Online (Sandbox Code Playgroud)
或者更好地使用如下,
new Date (2012, 2, 21).
Run Code Online (Sandbox Code Playgroud)
year - 表示年份的整数值.为了兼容性(为了避免Y2K问题),您应该始终指定年份; 使用1998年,而不是98年.
month - 表示月份的整数值,从1月的0开始到12月的11.
day - 表示月中某天的整数值(1-31).
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)
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在没有时区时使用本地时间.不可否认,这对普通人来说都是非常神秘的.
我不知道为什么会这样,但我发现你是使用正斜线还是破折号会影响答案.看一看.
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)
我做了一个非常快速的谷歌搜索,为什么会发生这种情况,没有答案.但这应该可以解决您的问题.所有你需要做的就是用正斜杠替换破折号,然后再将它们传递到你想要的位置.
编辑:对不起我在发布之前没有注意到已经接受的答案,请忽略这个答案.
由于时区与日期格式为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小时。