転載カレンダーオブジェクト~~

:リンクより転載https://blog.csdn.net/nbin2008/article/details/79425494


/ *
*カレンダーコントロール
DW DateWeekするvar =新しいです()
    DT =新しいDate();
Dw.setDate(dt.getFullYear()、dt.getMonth() - 0 + 1)。
VARリストは= Dw.getDayList(ブール値); // BOOL:真、適応長さ、尾は月の/の最初の週は削除されません。BOOL:偽、固定行7 * 6 = 42データ
リスト= [
    {
        日付:「2018年1月28日」
        日:28
        兄弟:真//先月または来月、日、月と今月非日付を区別するために使用
        週:0 // 0:月曜日、1:火曜日。
    }
    ...
]
* /
(関数(ウィンドウ){
    そこプロト= {
        getDay:関数(Y、M){
            VaRのMDAY =新しいアレイ(31、28、31、30、31、30、31、31、30、31、30、31)。
            IF((Y%4 == 0 && Y%100!= 0)|| Y%400 == 0)//うるう月かどうかを判断します
                MDAY [1] = 29。
            戻りMDAY [M - 1]。
        }、
        getWeek:関数(Y、M、D){
            そこ週;
            IF(M <= 12 && M> = 1){
                {(; iがmを<++ I VAR I = 1)のために
                    D + = this.getDay(Y、I)。
                }
            }
            / * *式の週に応じて日付を計算/
            週=(Y - 1 +(Y - 1)/ 4 - (Y - 1)/ 100 +(Y - 1)/ 400 + D)%7。
            // 0は1が月曜日に対応し、日曜日に対応します
            parseInt(週)を返します。
        }、
        getName:機能(年、月、日){
            戻り年+ " - " +月+ " - " +日。
        }、
        getPrev:関数(Y、M){
            IF(M-1 == 0){
                {戻ります
                    Y:Y-1、
                    M:12、
                    D:this.getDay(Y-1、12)
                }。
            }他{
                {戻ります
                    Y:Y、
                    M:M-1、
                    D:this.getDay(Y、M-1)
                }。
            }
        }、
        getNextを:関数(Y、M){
            {(M + 1> 12)場合
                {戻ります
                    Y:Y + 1、
                    M:1、
                    D:this.getDay(Y + 1、1)
                }。
            }他{
                {戻ります
                    Y:Y、
                    M:M + 1、
                    D:this.getDay(Y、M + 1)
                }。
            }。
        }、
        setDay:機能(日付、日、兄弟){
            TMP = date.match(/ \ D + / g)でした。
            this.dayList.push({
                日付:日付、
                日:日、
                週:this.getWeek(+ TMP [0] + TMP [1] + TMP [2])、
                兄弟:!!兄弟、
            })
        }、
        クリア:関数(){
            this.dayList = [];
        }、
        SETDATE:機能(年、月){
            VaRのcache_name =年+ " - " +月。
            IF(this.cache [cache_name]){
                this.dayList = this.cache [cache_name]。
                これを返します。
            }
            //
            this.clear();
            VAR名= nullを、
                インデックス= 0、
                年=のparseInt(年)、
                月=のparseInt(月)、
                dayTotal = this.getDay(年、月)、
                weekFirst = this.getWeek(年、月、1)、
                週負荷= this.getWeek(年、月、dayTotal)。
            //先月のデータ
            VaRのPREV = this.getPrev(年、月)、
                prevDate = prev.d - weekFirst + 1。
            {(; iはweekFirstを<I ++がVAR I = 0)のための
                名前= this.getName(prev.y、prev.m、prevDate)。
                this.setDay(名前、prevDate、1)。
                prevDate ++;
                インデックス++;
            }
            //月
            用(VAR I = 1; I <= dayTotal; iは++){
                名前= this.getName(年、月、I);
                this.setDay(名前、I);
                インデックス++;
            }
            //データ来月
            VAR次= this.getNext(年、月)、
                日= 1;
            一方、(指数<this.maxLen){
                名前= this.getName(next.y、next.m、日)。
                this.setDay(名前、日、1);
                インデックス++;
                日++;
            }。
            //キャッシュ
            this.cache [cache_name] = JSON.parse(JSON.stringify(this.dayList))。
            これを返します。
        }、
        getDayList:関数(BOOL){
            VARリスト= JSON.parse(JSON.stringify(this.dayList));
            IF(BOOL){
                = 7でlenました。
                    = 0を数えます。
                { - (len-- I; LEN> = 1 VAR I = list.length -1)のために
                    IF(リスト[I] [ '兄弟']){
                        ++数えます。
                    }
                }
                IF(== 7カウント){
                    = 7として、
                    一方、(LEN){
                        list.pop();
                        just--;
                    }
                }
            }
            リストを返します。
        }、
        INIT:関数(){
            this.cache = {};
            this.dayList = [];
            this.maxLen = 42。
            これを返します。
        }
    }
    機能DateWeek(){
        this.initを返します();
    }。
    DateWeek.prototype =プロト;
    DateWeek.prototype.constructor = DateWeek。
    window.DateWeek = DateWeek。
})(窓);

どのように使用するには:

VAR Dwを=新しいDateWeek()、
    DT =新しいDate();
Dw.setDate(dt.getFullYear()、+ dt.getMonth()+ 1)。

VAR一覧= Dw.getDayList(1)。 

 

1.私は、カップリングは非常に深刻であり、そしてどのようにDOM間の結合を低減する際に、それを自分で書いた?あなたは月かどうかを制御することができ、そのような兄弟の内部などのオブジェクトとして、各データセット、のためである私の助けに記事を転載します、他の状態が必要な場合は、追加することができます。

アイデアは、このような限り、オブジェクトを構成するための機会を利用し、実際にも、同じ方法を使って書くことができgetPrevを()行くこととは思わなかったthis.getDay()メソッドの真ん中として、特に制限ように見えるとき2.独自のコードを書きます機能判定arguments.lengthを内側に少し離れますが、どのように良い、それは実際には不明である、OOO、OOOのT ^ Tできます

3.var TMP = date.match(/ \ D + / GI);それはまた、そのように使用することができ、ハハ。

おすすめ

転載: www.cnblogs.com/lblaoalblaoa/p/11373391.html