VBAにはFormat関数があり日時や数値を整形します。
これをJavaScriptで再現してみました。なお全部ではなく日時部分だけです。
「date_format(日付オブジェクト,フォーマット)」のようにして使います。
例えばフォーマットを「yyyymmdd」とすると「20160118」に変換します。
function date_format(date_obj, format) {
//VBAのFormat関数の日時部分を再現。
//yyyy:年4桁,yy:年下2桁
//mmmm:月英語(January),mmm:月英語(Jan)
//mm:月2桁,m:月
//oooo:月(1月)
//dddd:曜日(Saturday),ddd:曜日(Sat)
//aaaa:曜日(土曜日),aaa:曜日(土)
//dd:日2桁,d:日
//hh:時2桁,h:時
//nn:分2桁,n:分
//ss:秒2桁,s:秒
//ggg:元号(平成),gg:元号(平),g:元号(H)
//ee:和暦年2桁,e:和暦年
//ww:第○週
//q:第○四半期
//y:第○日
var nen, tsuki, hi, yobi, ji, fun, byo, gengo, gengoa, wareki_nen, ganjitsu, days, weeks, temp;
nen = date_obj.getFullYear();
tsuki = date_obj.getMonth() + 1;
hi = date_obj.getDate();
yobi = date_obj.getDay();
ji = date_obj.getHours();
fun = date_obj.getMinutes();
byo = date_obj.getSeconds();
//時
format = format.replace(/hh/g, ("0" + ji).slice(-2));
format = format.replace(/h/g, ji);
//分
format = format.replace(/nn/g, ("0" + fun).slice(-2));
format = format.replace(/n/g, fun);
//秒
format = format.replace(/ss/g, ("0" + byo).slice(-2));
format = format.replace(/s/g, byo);
//年
format = format.replace(/yyyy/g, nen);
format = format.replace(/yy/g, ("0" + (nen % 100)).slice(-2));
//和暦年
if(date_obj < (new Date(1912, 7 - 1, 31))) {
gengo = "明治";
gengoa = "M";
wareki_nen = nen - 1867;
} else if(date_obj < (new Date(1926, 12 - 1, 26))) {
gengo = "大正";
gengoa = "T";
wareki_nen = nen - 1911;
} else if(date_obj < (new Date(1989, 1 - 1, 8))) {
gengo = "昭和";
gengoa = "S";
wareki_nen = nen - 1925;
} else {
gengo = "平成";
gengoa = "H";
wareki_nen = nen - 1988;
}
format = format.replace(/ggg/g, gengo);
format = format.replace(/gg/g, gengo.substr(0, 1));
format = format.replace(/g/g, gengoa);
format = format.replace(/ee/g, ("0" + wareki_nen).slice(-2));
format = format.replace(/e/g, wareki_nen);
//月の部分
format = format.replace(/mmmm/g, "月全部"); //January
format = format.replace(/mmm/g, "月部分"); //Jan
format = format.replace(/mm/g, ("0" + tsuki).slice(-2));
format = format.replace(/m/g, tsuki);
format = format.replace(/oooo/g, tsuki + "月"); //1月
//週
ganjitsu = new Date(nen, 0, 1);
days = Math.floor((date_obj - ganjitsu) / 24 / 60 / 60 / 1000);
weeks = Math.floor((days + ganjitsu.getDay() - yobi) / 7) + 1;
format = format.replace(/ww/g, weeks);
format = format.replace(/q/g, Math.ceil(tsuki / 3));
format = format.replace(/y/g, days + 1);
//曜日
format = format.replace(/dddd/g, "曜日全部"); //Sunday
format = format.replace(/ddd/g, "曜日部分"); //Sun
temp = ["日", "月", "火", "水", "木", "金", "土"][yobi];
format = format.replace(/aaaa/g, temp + "曜日");
format = format.replace(/aaa/g, temp);
format = format.replace(/w/g, yobi + 1);
//日
format = format.replace(/dd/g, ("0" + hi).slice(-2));
format = format.replace(/d/g, hi);
//月
temp = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][tsuki - 1];
format = format.replace(/月全部/g, temp);
format = format.replace(/月部分/g, temp.substr(0, 3));
//曜日
temp = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][yobi];
format = format.replace(/曜日全部/g, temp);
format = format.replace(/曜日部分/g, temp.substr(0, 3));
return format;
}
//VBAのFormat関数の日時部分を再現。
//yyyy:年4桁,yy:年下2桁
//mmmm:月英語(January),mmm:月英語(Jan)
//mm:月2桁,m:月
//oooo:月(1月)
//dddd:曜日(Saturday),ddd:曜日(Sat)
//aaaa:曜日(土曜日),aaa:曜日(土)
//dd:日2桁,d:日
//hh:時2桁,h:時
//nn:分2桁,n:分
//ss:秒2桁,s:秒
//ggg:元号(平成),gg:元号(平),g:元号(H)
//ee:和暦年2桁,e:和暦年
//ww:第○週
//q:第○四半期
//y:第○日
var nen, tsuki, hi, yobi, ji, fun, byo, gengo, gengoa, wareki_nen, ganjitsu, days, weeks, temp;
nen = date_obj.getFullYear();
tsuki = date_obj.getMonth() + 1;
hi = date_obj.getDate();
yobi = date_obj.getDay();
ji = date_obj.getHours();
fun = date_obj.getMinutes();
byo = date_obj.getSeconds();
//時
format = format.replace(/hh/g, ("0" + ji).slice(-2));
format = format.replace(/h/g, ji);
//分
format = format.replace(/nn/g, ("0" + fun).slice(-2));
format = format.replace(/n/g, fun);
//秒
format = format.replace(/ss/g, ("0" + byo).slice(-2));
format = format.replace(/s/g, byo);
//年
format = format.replace(/yyyy/g, nen);
format = format.replace(/yy/g, ("0" + (nen % 100)).slice(-2));
//和暦年
if(date_obj < (new Date(1912, 7 - 1, 31))) {
gengo = "明治";
gengoa = "M";
wareki_nen = nen - 1867;
} else if(date_obj < (new Date(1926, 12 - 1, 26))) {
gengo = "大正";
gengoa = "T";
wareki_nen = nen - 1911;
} else if(date_obj < (new Date(1989, 1 - 1, 8))) {
gengo = "昭和";
gengoa = "S";
wareki_nen = nen - 1925;
} else {
gengo = "平成";
gengoa = "H";
wareki_nen = nen - 1988;
}
format = format.replace(/ggg/g, gengo);
format = format.replace(/gg/g, gengo.substr(0, 1));
format = format.replace(/g/g, gengoa);
format = format.replace(/ee/g, ("0" + wareki_nen).slice(-2));
format = format.replace(/e/g, wareki_nen);
//月の部分
format = format.replace(/mmmm/g, "月全部"); //January
format = format.replace(/mmm/g, "月部分"); //Jan
format = format.replace(/mm/g, ("0" + tsuki).slice(-2));
format = format.replace(/m/g, tsuki);
format = format.replace(/oooo/g, tsuki + "月"); //1月
//週
ganjitsu = new Date(nen, 0, 1);
days = Math.floor((date_obj - ganjitsu) / 24 / 60 / 60 / 1000);
weeks = Math.floor((days + ganjitsu.getDay() - yobi) / 7) + 1;
format = format.replace(/ww/g, weeks);
format = format.replace(/q/g, Math.ceil(tsuki / 3));
format = format.replace(/y/g, days + 1);
//曜日
format = format.replace(/dddd/g, "曜日全部"); //Sunday
format = format.replace(/ddd/g, "曜日部分"); //Sun
temp = ["日", "月", "火", "水", "木", "金", "土"][yobi];
format = format.replace(/aaaa/g, temp + "曜日");
format = format.replace(/aaa/g, temp);
format = format.replace(/w/g, yobi + 1);
//日
format = format.replace(/dd/g, ("0" + hi).slice(-2));
format = format.replace(/d/g, hi);
//月
temp = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][tsuki - 1];
format = format.replace(/月全部/g, temp);
format = format.replace(/月部分/g, temp.substr(0, 3));
//曜日
temp = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][yobi];
format = format.replace(/曜日全部/g, temp);
format = format.replace(/曜日部分/g, temp.substr(0, 3));
return format;
}
コメント