最も当日に近い日付を得る

<html>
  <head><title>日付</title></head>
  <body>
    <h2>日付</h2>
    <script>
      // 「M/D」形式で指定した文字列から最も当日に近い日付を得る
      // 引数: date...日付。「M/D」形式
      // 戻値: 日付が date で、最も当日に近い日付
      function getNearestDate(date)
      {
        var today = new Date();
        var year = today.getFullYear();

        var this_year = new Date(year       + "/" + date);
        var last_year = new Date((year - 1) + "/" + date);
        var next_year = new Date((year + 1) + "/" + date);

        var diff_this = Math.abs(this_year - today);
        var diff_last = Math.abs(last_year - today);
        var diff_next = Math.abs(next_year - today);

        var diff = diff_this;
        var out  = this_year;

        if (diff_last < diff)
        {
          diff = diff_last;
          out = last_year;
        }

        if (diff_next < diff)
        {
          diff = diff_next;
          out = next_year;
        }

        return out;
      }

      document.write(getNearestDate("6/15"));
      document.write("<br>");
      document.write(getNearestDate("1/1"));
      document.write("<br>");
      document.write(getNearestDate("12/31"));
      document.write("<br>");
    </script>
  </body>
</html>

出力

Mon Jun 15 2009 00:00:00 GMT+0900
Fri Jan 01 2010 00:00:00 GMT+0900
Thu Dec 31 2009 00:00:00 GMT+0900