SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.10<<123456789101112131415161718192021222324252627282930>>2017.12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScriptのDateオブジェクトを使っていて、ちょっと困るのがそれを文字列にするときである。

"YYYY/MM/DD" という書式で欲しいと思っても結構めんどくさかったりする。
toLocaleString()などもあるが、あまり使えない。

ということで、作ってみる。
Date.prototype.format = function(fmt) {

var dt = this;
var era = [
{nameS:'S', nameM:'昭', nameL:'昭和', start:19261226},
{nameS:'H', nameM:'平', nameL:'平成', start:19890108}
];

var zero = function(n, l){
var t = ""+n;
while( t.length<l ) t = "0"+t;
return t.substr(t.length-l,l);
};
var era_index = function() {
var ymd = (dt.getFullYear ? dt.getFullYear() : dt.getYear() + 2000)*10000+(dt.getMonth()+1)*100+dt.getDate();
for(var i=era.length-1;i>=0;i--) if( ymd>=era[i].start ) return i;
return -1;
}

return fmt.replace(/Y+|G+|E+|M+|D+|W+|w+|H+|h+|A+|a+|m+|s+(\.s+)?/g, function(word) {

var type = word.charAt(0);
var len = word.length;
var num = 0;
var ret = "";

switch( type )
{
case 'Y':
case 'E':
num = dt.getFullYear ? dt.getFullYear() : dt.getYear() + 2000;

if( type=='E' ) {
var n = era_index();
if( n>=0 ) num -= Math.floor(era[n].start/10000) - 1;
}

if( type == 'Y' && len == 4 ) ret = zero(num, 4);
else if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 'G':
num = era_index();
if( num>=0 ) {
if( len == 2 ) ret = era[num].nameM;
else if( len == 1 ) ret = era[num].nameS;
else ret = era[num].nameL;
}
break;

case 'M':
num = dt.getMonth() + 1;
if( len == 4 ) ret = (['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])[num-1];
else if( len == 3 ) ret = (['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])[num-1];
else if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 'D':
num = dt.getDate();
if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 'W':
case 'w':
num = dt.getDay();
if( type == 'w' && len == 4 ) ret = (["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"])[num];
else if( type == 'w' && len == 3 ) ret = (["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"])[num];
else if( type == 'W' && len == 2 ) ret = (["日", "月", "火", "水", "木", "金", "土"])[num];
else if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 'h':
case 'H':
num = dt.getHours();
if( type=='h' ) num %= 12;
if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 'A':
case 'a':
num = dt.getHours()>=12 ? 1 : 0;
ret = (type=='A' ? ["午前","午後"] : ["AM","PM"])[num];
break;

case 'm':
num = dt.getMinutes();
if( len == 2 ) ret = zero(num, 2);
else ret = num;
break;

case 's':
num = dt.getSeconds();

var len2 = 0, p;
if( (p=word.indexOf("."))>=0 ) { len2 = len - p - 1; len = p; }

if( len == 2 ) ret = zero(num, 2);
else ret = num;

if( len2>0 ) {
var ms = zero(dt.getMilliseconds(), 3);
while( len2>ms.length ) ms+="0";
ret += "."+ms.substr(0,len2);
}
}
return ret;
});
};


(new Date()).format("YYYY-MM-DD HH:mm:ss") のように使う。詳細はコードから読み取っていただきたい(^^;
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。