format.js更新 ― 2007年05月24日 21時21分10秒
日付・数値フォーマットライブラリ「format.js」を更新してみた。ダウンロードはこちらから。
parseExact静的メソッドの追加
DateとNumberに文字列を解析するparseExactメソッドを追加。使い方は以下の感じ。
// Date.parseExact Date.parseExact( "2007年05月24日 19時00分00秒", "yyyy年MM月dd日 HH時mm分ss秒" ); // → 2007/05/24 19:00:00 を表す Date // Number.parseExact Number.parseExact( "1,000", "#,##0" ); // → 1000第一引数に解析対象の文字列、第二引数にフォーマットパターンを指定する。フォーマットパターンは#formatメソッドで使用可能な書式指定文字列と同じものが使用できる。
動作サンプル
動作仕様
例によって.NET Framework劣化コピーな仕様。
Dateの書式指定子の仕様は以下の通り。
書式指定子 | 説明 |
---|---|
yyyy、yy、y | 年として解析。yyyyは4桁、yyは下2桁、yは1桁または2桁の数字を解析する。 y 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 解析した年の値が100以下の場合、30未満は2000年台、30以上は1900年台として解釈する。 |
MM、M | 月として解析。MMは2桁、Mは1桁または2桁の数字を解析する。 M 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 |
dd、d | 日として解析。ddは2桁、dは1桁または2桁の数字を解析する。 d 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 |
HH、H | 時として解析。HHは2桁、Hは1桁または2桁の数字を解析する。。 H 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 |
mm、m | 分として解析。mmは2桁、mは1桁または2桁の数字を解析する。 m 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 |
ss、s | 秒として解析。ssは2桁、sは1桁または2桁の数字を解析する。 s 以外のパターンを使用した場合、パターンの文字列長と解析する文字列の長さが一致した場合のみ正常に解析できる。 |
fff、ff、f | ミリ秒として解析。 パターンが f の場合は秒以下、ffの場合は0.1秒以下が丸められる。例えば、ミリ秒部が「12」の場合、fでは0ミリ秒、ffでは 10ミリ秒、fffでは 12ミリ秒 になる。 |
Numberの書式指定子の仕様は以下の通り。元々Number()を使用することでほとんど十分ということもあり、桁数など細かい部分は手を抜いている。
書式指定子 | 説明 |
---|---|
#,##0[.0+] | 3桁ごとにカンマで区切る書式を解析する。小数点以下の桁数は保証されないので、"1,000.123"を"#,##0.00"でparseしてた場合でも結果は「1000.123」になる。 |
0+[.0+] | 0詰の書式を解析する。Number()に丸投げしているだけ。 |
x[n]、X[n] | 16進数を解析する。対象文字列の先頭に"0x"をくっつけてNumber()に丸投げしているだけ。 |
その他の修正点
年書式指定子"y"の動作仕様を変更。従来は単純な数字出力にしていたものを、2桁までに制限するように変更した。
// 2007年だとして new Date().format( "y" ); // → "7"、以前は"2007" new Date().format( "yy" ); // → "07" new Date().format( "yyyy" ); // → "2007"
反省というかぼやきというか
なんとか実装はできたが、とてもスマートとはいえない実装になっている。 format実装時の設計を引きずって書式指定子オブジェクト(Date/Numberのformattersの要素)に実際の解析メソッドを実装する形でやってみたが、書式指定子間での連携が考慮されていないので、 たとえばこの状態からAMやPMに対応する書式指定子を実装できない(タイムゾーンくらいは実装できそうだが)。
また、おもったよりコンパクトにならなかったので、ますますこのライブラリの存在意義が薄い気がしているがまあ気にしないようにしよう。
関連エントリ
コメント
トラックバック
このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2007/05/24/1531161/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。