datepicker date off by one day

前端 未结 14 841
攒了一身酷
攒了一身酷 2020-12-01 05:22

The date returned by date picker is off by one day. Is it a problem in my code or is it a bug?

The date sent to date_picker is 2012-03-21. The date returned by dat

相关标签:
14条回答
  • 2020-12-01 05:27

    check your spelling of .getFormatedDate and change it to .getFormattedDate it's a trivial change but tweak it and see if any fixture results.

    0 讨论(0)
  • 2020-12-01 05:28

    I don't know why this works but what I've found is whether you use forward slashes or dashes affects the answer. Take a look.

    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!
    

    So to fix my issue I did a simple regex on my input date to always replace the first three dashes with forward slashes.

    var strInputValue = control.value, // <-- get my date string
        dteCurrent;
    
    strInputValue = strInputValue.replace(/-/, '/')  // replace 1st "-" with "/"
                                 .replace(/-/, '/'); // replace 2nd "-" with "/"
    
    dteCurrent = new Date(strInputValue);
    

    I did a very quick google search for why this would happen and no answer. But this should fix your issue. All you have to do is replace the dashes with forward slashes before you pass them to where you want them.

    Edit: sorry I didn't notice the already accepted answer before posting, please disregard this answer.

    0 讨论(0)
  • 2020-12-01 05:29

    Try out this,

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

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

    0 讨论(0)
  • 2020-12-01 05:37

    This is not a bug, but definitely confusing.

    Most of the answers on this page are confused and contain some mis-information.

    The real issue is in how the javascript Date object parses date strings.

    The best answer I have found is this stack-O answer. Check out its' excellent write-up.

    Below is a very pertinent comment from the answer mentioned above. (credit: @Mizstik)

    All of this is due to the behavior of the underlying Date.parse() trying to follow ISO 8601. When the date string follows the yyyy-mm-dd format, it's assumed to be ISO 8601 with implicit UTC 00:00. When the string deviates from the format (e.g. mm-dd-yyyy or slash instead of hyphen), it falls back to the looser parser according to RFC 2822 which uses local time when the timezone is absent. Admittedly, this will all be quite arcane to an average person.

    0 讨论(0)
  • 2020-12-01 05:37

    I don't have the reputation to comment, but Venu M gave me good insight. My project is having the same issue where depending on the syntax of my date input, the date returns as input or off one day. Expanding out and looking at the full date format, my different input date formats are returning in either UTC or my local time zone, depending on the syntax. I am using Moment JS to parse my dates then returning a date object for validation with Breeze. I have either an input modal or a table in which to edit, so now I need to make sure both are parsed and validated identically. I suggest verifying your date object is being created the same way regardless of its input syntax or input location.

    0 讨论(0)
  • 2020-12-01 05:37

    To avoid getting one day off, I replaced the - with / using .replace() on the creation of the date variable like this

    var startDate = new Date(data[3].replace(/-/g, '\/'));
    
    0 讨论(0)
提交回复
热议问题