datepicker约会一天

时间:2012-03-01 01:24:51

标签: 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));

14 个答案:

答案 0 :(得分:24)

这不是日期选择器,

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

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

  1. 新日期()
  2. 新日期(毫秒)
  3. 新日期(dateString)
  4. 新日期(年,月,日[,小时,分钟,秒,毫秒])
  5. 所以在你的情况下,它将调用dateString和parse。所以请尝试将时间添加如下,

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

    DEMO

    或更好地使用如下,

    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)]     }