/**
* ***js の時刻と日付の形式***
*
* テンプレート文字列は厳密な形式を採用しており、制限を超えると例外がスローされます。例: yyyy-mm-yyyy 形式は例外をスローします。
*
* 年の長さ: 2/4 桁
* q の 4 分の 1 桁の長さ
* M 月の長さ: 1 ~ 2 桁
* d-日の長さ: 1 ~ 2 桁
* H 時間の長さ: 24 時間形式の 1 ~ 2 桁、h: 12 時間形式
*分の長さ: 1 ~ 2 桁
* 秒の長さ: 1 ~ 2 桁
* Sミリ秒の長さ: 1桁固定
* @param {日付型オブジェクト} date
* @param {文字列型のテンプレート文字列} fmt
* @return 形式の時刻と日付の文字列
* @著者lyt
*/
function DateFormat(date, fmt){
If (arguments.length != 2) // パラメータ番号の確認
throw Error('引数の長さが不正です');
If (!date || (typeof date != 'object') || (d.constructor != Date)) // パラメータの有効性検証
throw Error(arguments[0] ':型は Date 型ではありません');
If (/H /.test(fmt) && /h /.test(fmt))
throw Error("時間の形式が間違っています。同じ型は連続して 1 回しか出現できません!");
/* テンプレートパラメータの検証、通常の検証方法 */
var verify = function(Rex){
var arr = new RegExp(Rex).exec(fmt) // 一致する結果の配列を取得します
if (!arr) // 一致が失敗した場合は
を返します
return "";
If (fmt.split(Rex).length > 2) // 同じ型が複数回出現します
throw Error("fmt フォーマット エラー: 同じ型は連続して 1 回しか出現できません!");
return arr[0];
};
/**
* 月、日、時、分、秒のユニバーサル一致置換を提供します
* @param {オブジェクトまたは属性キー} r
* @param {r は通常のオブジェクトに対応します} rex
**/
var common = function(r, rex) {
If(レン !=1 && レン !=2)
throw Error("月の形式エラー: M は 1/2 回しか出現できません");
len == 2 ? fmt=fmt.replace(rex, o[r].length==1 ? "0" o[r] : o[r]) : fmt=fmt.replace(rex, o[r]) ;
}
var o = { // データストレージオブジェクト
"y ": date.getFull Year() "", // 年
"q ": Math.floor((date.getMonth() 3) / 3), // 四半期
"M ": date.getMonth() 1 "", // 月
"d ": date.getDate() "", // 日
"H ": date.getHours() "", // 24 時間
"h ": date.getHours() "", // 12時
"m ": date.getMinutes() "", // 分
"s ": date.getSeconds() "", // 秒
"S ": date.getMilliseconds() // ミリ秒
}
for(var r in o) {
var rex、len、temp;
rex = 新しい RegExp(r);
temp = verify(rex) // 結果の文字列と一致します
;
len = temp.length; // 長さ
If(!len || len == 0)
続行;
if(r == "y ") {
If(len !=2 && len != 4)
throw Error("年の形式エラー: y は 2/4 回しか出現できません");
len == 2 ? fmt=fmt.replace(rex, o[r].substr(2,3)) : fmt=fmt.replace(rex, o[r]);
} else if(r == "q ") {
if(len != 1)
throw Error("四半期形式エラー: q は 1 回しか出現できません");
fmt=fmt.replace(rex, o[r]);
} else if(r == "h ") {
If(レン !=1 && レン !=2)
throw Error("時間形式エラー: h は 1/2 回しか出現できません");
var h = (o[r] > 12 ? o[r]-12 : o[r]) "";
len == 2 ? fmt=fmt.replace(rex, h.length==1 ? "0" h : h) : fmt=fmt.replace(rex, h);
} else if(r == "S ") {
If(len != 1)
throw Error("ミリ秒形式エラー: S は 1 回しか出現できません");
fmt=fmt.replace(rex, o[r]);
// (r=="M " || r=="d " || r=="H " || r=="m " || r=="s ")
コモン(r, レックス)
}
fmt を返します;
}
console.log(DateFormat(new Date(),' yyyyyearyy Q 四半期 M 月 dd 日 HH 時 m 分 s 秒 S ミリ秒'));
console.log(DateFormat("I am not a time object",'yyyy 年 q 四半期 M 月 dd 日 Hh 時 m 分 s 秒 S ミリ秒'));
console.log(DateFormat(new Date(),' yyyy年 q 四半期 MMM 月 dd 日 HH 時 m 分 s 秒 S ミリ秒'));
他のエフェクトを 1 つずつリストすることはしません。興味がある場合は、コードをコピーして直接テストして、バグや最適化が必要な領域がある場合は、自由に修正してください。