:リンクより転載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);それはまた、そのように使用することができ、ハハ。