日期选择器返回的日期是一天。这是我的代码中的问题还是一个错误?
发送至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));
答案 0 :(得分:24)
这不是日期选择器,
console.log(new Date('2012-03-21')); //prints Tue Mar 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)
Javascript Date对象可以接受以下语法之一,
所以在你的情况下,它将调用dateString和parse。所以请尝试将时间添加如下,
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)的整数值。
答案 1 :(得分:20)
似乎是一个错误。如果发送到Date()的字符串格式为2012/03/21而不是2012-03-21。日期似乎正确。
答案 2 :(得分:13)
您可以将差异添加到日期,这将基本上忽略时区。
d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
答案 3 :(得分:12)
这不是一个错误,但绝对令人困惑。
此页面上的大部分答案都很混乱,并且包含一些错误信息。
真正的问题在于javascript Date
对象如何解析日期字符串。
我找到的最佳答案是this stack-O answer。看看它的'优秀的写作。
以下是上述答案中非常相关的评论。 (信用:@Mizstik)
所有这一切都是由于基础Date.parse()试图遵循ISO 8601的行为。当日期字符串遵循yyyy-mm-dd格式时,它被假定为ISO 8601隐含UTC 00:00。当字符串偏离格式(例如mm-dd-yyyy或斜线而不是连字符)时,它会根据RFC 2822回退到更宽松的解析器,RFC 2822在没有时区时使用本地时间。不可否认,这对普通人来说都是非常神秘的。
答案 4 :(得分:7)
我不知道为什么会这样,但我发现你是使用正斜线还是破折号会影响答案。看一看。
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);
我做了 非常快速的 谷歌搜索为什么会发生这种情况而没有答案。但这应该可以解决您的问题。所有你需要做的就是用正斜杠替换破折号,然后再将它们传递到你想要的地方。
编辑:抱歉,在发布之前我没有注意到已经接受的答案,请忽略这个答案。
答案 5 :(得分:5)
由于时区与日期格式的差异而发生 - 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小时的不同时区。
答案 6 :(得分:1)
我没有评论的声誉,但Venu M给了我很好的见解。我的项目有同样的问题,根据我日期输入的语法,日期作为输入返回或关闭一天。扩展并查看完整日期格式,我的不同输入日期格式将以UTC或我的本地时区返回,具体取决于语法。我正在使用Moment JS来解析我的日期,然后返回一个日期对象以供Breeze验证。我有一个输入模式或一个要编辑的表,所以现在我需要确保两者都被相同地解析和验证。无论输入语法或输入位置如何,我建议验证日期对象的创建方式是否相同。
答案 7 :(得分:1)
var myDate = $.datepicker.parseDate("yy-mm-dd", "2013-10-21");
..//do whatever with myDate now
答案 8 :(得分:1)
在尝试了许多解决方案后,以下代码对我起作用(https://stackoverflow.com/a/14006555/1736785)
function createDateAsUTC(date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
答案 9 :(得分:1)
为避免休假一天,我在创建日期变量时使用-re。(/)替换了--
var startDate = new Date(data[3].replace(/-/g, '\/'));
答案 10 :(得分:0)
检查.getFormatedDate
的拼写并将其更改为.getFormattedDate
这是一个微不足道的变化,但调整它,看看是否有任何夹具结果。
答案 11 :(得分:0)
在遇到同样的问题并登陆此页面后,在我的情况下,结果是由于日期标记无效造成的。我星期一开始这周,而不是星期天。我希望这有助于某人。
答案 12 :(得分:0)
正如所说的JavaScript一月等于0,所以它适用于日期选择器或输入类型日期。
end_date = end_date.split('-');
end_date = new Date(end_date[0],Number(end_date[1])-1,end_date[2]);
答案 13 :(得分:-1)
尝试一下,
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)]
},
范围”:{ “今天”:[moment()。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。hours(23).minutes(59).seconds(59).milliseconds( 999)], '昨天':[moment()。subtract(1,'days')。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。subtract(1,'days') .hours(23).minutes(59).seconds(59).milliseconds(999)], 过去7天:[moment()。subtract(6,'days')。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。hours(23).minutes (59).seconds(59).milliseconds(999)], “过去30天”:[moment()。subtract(29,'days')。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。hours(23).minutes (59).seconds(59).milliseconds(999)], “本月”:[moment()。startOf('month')。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。endOf('month')。hours( 23).minutes(59).seconds(59).milliseconds(999)], “上个月”:[moment()。subtract(1,'month')。startOf('month')。hours(0).minutes(0).seconds(0).milliseconds(0),moment()。减去(1,'month')。endOf('month')。hours(23).minutes(59).seconds(59).milliseconds(999)] }