Jquery Validation fix for date format dd/mm/yyyy in Chrome and Safari

After a long search, finally i found the solution for JQuery validation (Can get the plugin from here: http://docs.jquery.com/Plugins/Validation) for date in Chrome and Safari.
This is because Chrome and Safari do not handle the format properly.
When developer set datepicker format from mm/dd/yyyy (default format) to dd/mm/yyyy, JQuery validation plugin tool does not able validate this format (only happen in Chrome and Browser. Other browser like IE, and Firefox is working fine).

For example, if you initiate datepicker like this:
$(':input.date').datepicker({dateFormat: 'dd/mm/yy'});



Then when you select date with day more than 12 like 13/11/2011 or 22/11/2011 and so on, and when you are using Jquery validation plugin to validate before submit, this will normally return with 'Please enter a valid date' in Chrome and Safari.

The solve this issue, it is needed to modify JQuery validation plugin. For my case it is jquery.validation.min.js.
Look for a part like this in the file:
" date:function(value,element) "

SOLUTION
The whole part of the function should looks like this:
date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));}


Replace this whole part with this:
date:function(value,element){var d = new Date();return this.optional(element)||!/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));}
(those in red is the add on to the previous function)


For now your validation should work for all browser included Chrome and Safari. Remember to clear cache for the changes to take effect.

Happy Coding!!!!

Comments

  1. Hi,

    I'm a bit late to this post, but this solution doesn't work.

    The toLocaleDateString method doesn't take any parameters. What you're doing is getting the locale string value of the current date. That means the test is for the current date, not the date in the textbox (or wherever).

    Damian Brady

    ReplyDelete
    Replies
    1. Hi Damian,

      Thanks for pinpointing out my mistake here. Seems like it is just bypass the checking using current date .
      I'll try and look for a correct answer and repost this.
      THanks a lot

      Delete

Post a Comment

Popular posts from this blog

Django Form: MultipleChoiceField and How To Have Choices From Model Example

Jquery Validation fix for date format dd/mm/yyyy in Chrome and Safari

DJango Queryset comparing date time