<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: leap code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 08:06:06 GMT</pubDate>
    <description>DZone Snippets: leap code</description>
    <item>
      <title>Is Date //JavaScript Function</title>
      <link>http://snippets.dzone.com/posts/show/2204</link>
      <description>&lt;a href="http://jsfromhell.com/geral/is-date"&gt;&lt;br /&gt;Checks if a date is valid and returns error codes described bellow.&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/geral/is-date [v1.0]&lt;br /&gt;&lt;br /&gt;isDate = function(y, m, d){ //v1.0&lt;br /&gt;        if(typeof y == "string" &amp;&amp; m instanceof RegExp &amp;&amp; d){&lt;br /&gt;            if(!m.test(y)) return 1;&lt;br /&gt;            y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];&lt;br /&gt;        }&lt;br /&gt;        d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;&lt;br /&gt;        return arguments.length != 3 ? 1 : d &lt; 1 || d &gt; 31 ? 2 : m &lt; 1 || m &gt; 12 ? 3 : /4|6|9|11/.test(m) &amp;&amp; d == 31 ? 4&lt;br /&gt;        : m == 2 &amp;&amp; (d &gt; ((y = !(y % 4) &amp;&amp; (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Usage&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;&lt;br /&gt;getDateMsg = function(x){&lt;br /&gt;    return x == 0 ? "Valid Date"&lt;br /&gt;    : x == 1 ? "Invalid date format"&lt;br /&gt;    : x == 2 ? "Invalid day"&lt;br /&gt;    : x == 3 ? "Invalid month"&lt;br /&gt;    : x == 4 ? "In April, June, September and November there's no 31 day"&lt;br /&gt;    : x == 5 ? "February has only 28 days"&lt;br /&gt;    : x == 6 ? "In leap years, February has 29 days": "nothing =]";&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var x = [&lt;br /&gt;    isDate("22/07/1984", /^([0-9]{1,2})[\/]([0-9]{1,2})[\/]([0-9]{1,4})$/, {d: 1, m: 2, y: 3}),&lt;br /&gt;    isDate("1984-07-22", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}),&lt;br /&gt;    isDate("07-22-1984", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}),&lt;br /&gt;    isDate(2000, 1, 32),&lt;br /&gt;    isDate(2000, 0, 1),&lt;br /&gt;    isDate(2000, 4, 31),&lt;br /&gt;    isDate(2001, 2, 29),&lt;br /&gt;    isDate(2004, 2, 30)&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;for(var i = -1, l = x.length; ++i &lt; l; document.write(getDateMsg(x[i]), "&lt;br /&gt;"));&lt;br /&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Help&lt;br /&gt;&lt;code&gt;&lt;br /&gt;isDate(y: Integer, m: Integer, d: Integer): Integer&lt;br /&gt;    Checks a date and returns 0 if it's valid or one of the error codes bellow.&lt;br /&gt;    y year&lt;br /&gt;    m month&lt;br /&gt;    d day&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;isDate(date: String, matcher: RegExp, map: Object): Integer&lt;br /&gt;    Checks a date and returns 0 if it's valid or one of the error codes bellow.&lt;br /&gt;    date date in a string form&lt;br /&gt;    matcher regular expression responsible to find and store the day, month and year&lt;br /&gt;    			&lt;br /&gt;    map object containing the position where each date component is localized inside the regular expression. Its format is the following: {d: positionOfTheDay, m: positionOfTheMonth, y: positionOfTheYear}								&lt;br /&gt;Return codes&lt;br /&gt;    * 0 = Valid date&lt;br /&gt;    * 1 = Date format invalid (regular expression failed or amount of arguments != 3)&lt;br /&gt;    * 2 = Day isn't between 1 and 31&lt;br /&gt;    * 3 = Month isn't between 1 and 12&lt;br /&gt;    * 4 = On April, June, September and November there isn't the day 31&lt;br /&gt;    * 5 = On February the month has only 28 days&lt;br /&gt;    * 6 = Leap year, February has only 29 days&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Jun 2006 20:12:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2204</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
