JSは、次のような日付オブジェクトを取得するためのさまざまな異なる属性メソッドを提供します。 GetDay Method | GetFullyear Method | Gethoursメソッド...など、ユーザーが自分で提供されるテンプレート(パターン)に従って指定された時間オブジェクトをフォーマットするためのJavaのようなメソッドは提供されないため、誰もが-.-をからかうための小さな方法をカプセル化しました。あなたが良い提案があるなら、私はそれを寛大に勧めたいと思います。
知識ポイントを使用してください:
引数:このオブジェクトは、実行される関数とそれを呼び出す関数のパラメーターを表します。明示的に作成することはできません。長さの属性があり、配列のような「[]」構文の値を取得できますが、配列ではありません。 Typeofオブジェクト:演算子は、式のデータ型を表す文字列を返します。 6つの可能性: "number"、 "" string "、" boolean、 "" object、 "" function、および "undefined"。 Object.Constructor:オブジェクトを作成する関数を表します。オブジェクトは、オブジェクトまたは関数の名前である必要があります。基礎となるデータには、この属性がありません。 Exec Method:正規表現パターンを使用して検索を文字列で実行し、検索結果を含む配列を返します。一致は見つかりませんでしたが、nullを返します。アレイ内の同じタイプの一致する要素は、繰り返し表示されません。 str.split(rex | str):文字列を通常のオブジェクトまたはサブストリングとしてサブストリングに分割し、結果を文字列アレイとして返します。スローエラー( 'MSG'):メッセージ情報でエラーをスローします。スローの後に任意の式が続くことができます。また、3次元演算子、および比較的単純なsubstrのいくつかの使用法もあります。
コードスニペット:
コードコピーは次のとおりです。
/**
**** JS日付と日付のフォーマット*** <br>
* <p>
*テンプレート文字列は、厳密な形式を採用します。フォーマットを超えると、例外がスローされ、各形式は1回しか表示できません。たとえば、yyyy-mm-yyyy形式は例外をスローします
* </p>
* Y年の長さ:2/4ビット<br>
* Q-Quartry Length:1桁<br>
* mヶ月の長さ:1〜2桁<br>
* d-daiの長さ:1〜2桁<br>
* H-TIME長:1〜2位置24時間システム、H:12時間システム<br>
* m-length:1〜2桁<br>
* s秒長さ:1〜2ビット<br>
* S-MS長さ:1ビットを修正しました
* @param {日付タイプオブジェクト}日付
* @param {文字列タイプテンプレート文字列} fmt
* @returnフォーマットされた時間と日付の文字列
* @author lyt
*/
function dateformat(date、fmt){
if(arguments.length!= 2)//パラメーターの数を確認します
スローエラー( '引数の長さは違法です');
if(!date ||(typeof date!= 'object')||(d.constructor!= date))//パラメーターの法的確認
スローエラー(引数[0] + ':タイプは日付タイプではありません');
if(/h+/.test(fmt)&& /h+/.test(fmt)))
スローエラー(「時間の形式が間違っています。同じタイプが連続して1回しか表示できません!」);
/*テンプレートパラメーター検証、定期的な検証方法*/
var verify = function(rex){
var arr = new regexp(rex).exec(fmt); //一致する結果配列を取得します
if(!arr)//一致が失敗した場合は返します
戻る "";
if(fmt.split(rex).length> 2)//同じタイプの間隔が複数回発生します
スローエラー( "fmt形式エラー:同じタイプが連続して1回しか表示できません!");
arr [0]を返します。
};
/**
*数ヶ月、数日、時間、分、秒にわたって普遍的な一致する交換を提供する
* @param {object o属性キー} r
* @param {rは通常のオブジェクトに対応します} rex
**/
var common = function(r、rex){
if(len!= 1 && len!= 2)
スローエラー( "月形式エラー:mは1/2回しか表示できません");
len == 2? fmt = fmt.Replace(rex、o [r] .length == 1? "+o [r]:o [r]):fmt = fmt.replace(rex、o [r]);
}
var o = {//データストレージオブジェクト
"y +":date.getTullyear() + ""、// year
「Q +」:math.floor((date.getMonth() + 3) / 3)、// Quarterly
「M +」:date.getMonth() + 1 + ""、//月
"d +":date.getDate() + ""、// day
「H +」:date.gethours() + ""、// 24:00
「H +」:date.gethours() + ""、// 12時
「M +」:date.getMinutes() + ""、//ポイント
"s +":date.getSeconds() + ""、//秒
"s+":date.getMilliseConds()// milliseconds
}
for(var r in o){
Var Rex、Len、Temp;
rex = new regexp(r);
temp = verify(rex); //結果の文字列に一致します
len = temp.length; // 長さ
if(!len || len == 0)
続く;
if(r == "y+"){
if(len!= 2 && len!= 4)
スローエラー( "年形式エラー: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)
スローエラー( "四半期形式エラー:qは1回しか表示できません");
fmt = fmt.replace(rex、o [r]);
} else if(r == "h+"){
if(len!= 1 && len!= 2)
スローエラー( "時間形式エラー: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)
スローエラー( "Millisecondsフォーマットエラー:sは1回しか表示できません");
fmt = fmt.replace(rex、o [r]);
} else {//(r == "m+" || r == "d+" || r == "h+" || r == "m+" || r == "s+")
共通(R、レックス)
}
}
FMTを返します。
}
上記のデモンストレーション効果は参照用です。
コードコピーは次のとおりです。console.log(dateformat(new date()、 'yyyy's qq m month dd day hh hour m minute s second s millisecond'));
コードコピーは次のとおりです。console.log(dateformat(new date()、 'yyyyyyyyyqmdddddddddddhhhmmmhmmmhmming s second s millisecond');
The code copy is as follows: console.log(DateFormat(new Date(),'yyyyy', q quarter, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、Q、
コードコピーは次のとおりです。console.log(dateformat( "私は時間のオブジェクトではありません"、 'yyyyy year q quarter m month dd day hh hour m minute s second s millisecond'));
コードコピーは次のとおりです。console.log(new date()、 'yyyy's qq mmm month ddd ddd ddd ddd hh hour m minute s second s millisecond'));
他の効果を1つずつリストしません。興味がある場合は、コードをコピーして直接テストできます。最適化する必要があるバグや領域がある場合は、寛大なリマインダーを与えてください。
上記は、この非常に有用なカプセル化関数の紹介です。それは非常に実用的ではありませんか?友達はプロジェクトで直接それを使用できます。