dateformat.js

日付フォーマット変換ライブラリ

指定したパターンによるDate->String、String->Dateの変換を行うライブラリです。


ソース

Ver 1.1 : 2008/04/02


サンプル

「パターン」を入力し、「フォーマット」ボタンを押下すると、現在時刻を指定パターンによる文字列に変換します。

「パース」ボタンを押下すると、「文字列」を「パターン」に沿ってパースし、Dateオブジェクトに変換します。


使い方

本ライブラリを読み込んだ状態で、パターンを指定してDateFormatクラスを生成し、format(Date->String)/parse(String->Date)関数により変換を行います。

var dateFormat = new DateFormat("yyyy/MM/dd HH:mm:ss SSS");
var str = dateFormat.format(new Date()); // Date(現在時刻)をStringに変換
alert(str); // "2007/05/10 12:15:21 312"のように表示される
var date = dateFormat.parse("2005/03/02 12:23:45 021"); // StringをDateに変換

DateFormatオブジェクトは、生成時に指定したパターンを保持するので、パラメータを変えてformat/parseを繰り返し呼び出すことが可能です。
(コンストラクタにてパターンの構文を解析するので、同じパターンならば一度生成したオブジェクトを使いまわす方がフォーマンスが多少良くなります。)

var dateFormat = new DateFormat("yyyy年MM月dd日 HH時mm分ss秒");
var str1 = dateFormat.format(new Date());
var str2 = dateFormat.format(new Date());
var date1 = dateFormat.parse("2005年03月02日 12時23分44秒");
var date2 = dateFormat.parse("2007年03月28日 00時00分00秒");

パターンで使用している文字をそのままの文字として表示したい場合には、シングルクォートで囲むことにより、パターンとして解釈されずにそのままの文字として表示されます。

// "yyyy:2007 MM:05 dd:10" のように表示
new DateFormat("'yyyy:'yyyy 'MM:'MM 'dd:'dd").format(new Date()); 

また、シングルクォート自体を表示したい場合にはシングルクォートを2つ並べることにより表示できます。

new DateFormat("d. M. yy''").format(new Date()); // "10. 5. 07'" のように表示

パターンを追加したい場合には、DateFormat.prototype._formatter(または _parser) に追加することにより、簡単に拡張できます。

例として、AM/PMを表示する"a"というパターンを追加する場合、下記のようになります。(formatのみをターゲットとした場合)

DateFormat.prototype._formatter["a"] = function(date, pattern) {
  // 第1引数に変換対象のDateオブジェクト
  // 第2引数にパターンの文字列(文字列の長さによって表示を変える場合には、これを使用する)

  // 返却するのは、変換後の文字列
  return date.getHours < 12 ? "AM" : "PM";
}

var dateFormat = new DateFormat("yyyy年MM月dd日 a");
dateFormat.format(new Date()); // "2007年05月10日 AM" のように表示

パターン

下記のパターンをサポートしています。

なお、パターンの繰り返し文字数によって、表示形式が異なってきます。(0埋め表示など)

パターン文字内容
y 年。(西暦)
2文字以下の場合は西暦の下位2桁、3文字以上の場合は 西暦4桁+指定文字数に満たない部分は0埋め。

ex.
  2007年の場合.. "yy" → "07"、"yyyy" → "2007"、"yyyyyy"→"002007"
M 月。(1-12)
指定文字数に足らない部分は0埋め。

ex.
  1月の場合 "M" -> "1"、"MM" -> "01"
  12月の場合 "M" -> "12"、"MM" -> "12"
d 日。
指定文字数に足らない部分は0埋め。

ex.
  1日の場合 "d" -> "1"、"dd" -> "01"
 30日の場合 "d" -> "30"、"dd" -> "30"
H 時。(0-23)
指定文字数に足らない部分は0埋め。

ex.
  0時の場合 "H" -> "0"、"HH" -> "00"
 23時の場合 "H" -> "23"、"HH" -> "23"
m 分。
指定文字数に足らない部分は0埋め。

ex.
  0分の場合 "m" -> "0"、 "mm" -> "00"
  50分の場合 "m" -> "50"、 "mm" -> "50"
s 秒。
指定文字数に足らない部分は0埋め。

ex.
  0秒の場合 "s" -> "0"、"ss" -> "00"
  59秒の場合 "s" -> "59"、"ss" -> "59"
S ミリ秒。
指定文字数に足らない部分は0埋め。

ex.
  1ミリ秒の場合 "S" -> "1"、 "SS" -> "01"、"SSS" -> "001"
  12ミリ秒の場合 "S" -> "12"、 "SS" -> "12"、"SSS" -> "012"
  999ミリ秒の場合 "S" -> "999"、 "SS" -> "999"、"SSS" -> "999"

※上記パターンで使用している文字をそのままの文字として表示したい場合には、シングルクォートで囲んでください。

※シングルクォート自体を表示したい場合にはシングルクォートを2つ並べることにより表示できます。


ライセンス

MITライセンスとします。

商用・非商用に関わらず無償で利用することができます。著作権表記とライセンス表記さえ行えば、再配布、再利用に制約はありません。

原文はこちら:MIT-LICENSE.txt


その他

IE6.0、Firefox2.0、Opera9.2、Safari2.0.4にて動作確認が出来ています。

お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。