Javascript 日期选取器将日期取消一天
日期选取器返回的日期被取消一天。这是我的代码中的一个问题还是一个bug 发送至日期选择器的日期为2012-03-21。datepicker返回的日期为2012年3月20日星期二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的拼写,并将其
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).
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,但绝对令人困惑
本页上的大多数答案都很混乱,并且包含一些错误信息
真正的问题在于javascriptDate
对象如何解析日期字符串
我找到的最好的答案是。看看它的精彩评论
下面是对上述答案的一个非常中肯的评论。(信用证:@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更正确