Ext JS 4実装week(曜日)付き日付選択コントロール(実戦二)

2796 ワード

前言
JavaScriptの日付と時刻
Ext JS 4実装week(曜日)付き日付選択コントロール(実戦一)
本編のいくつかの予備知識を詳しく理解する必要がある場合は、以上の2編を参考にすることができます.
Javascriptには、処理時間にDateオブジェクトが用意されています.しかし、Dateは週を取得する方法を提供していません.
Web側でjs方式である時間を取得するのはこの年の数週間目であり、いくつかのアルゴリズムに基づいて実現することができる.もちろん、jqueryの拡張コンポーネントなどには、このような既存のパッケージが直接提供されています.
Ext jsのように週を取得する方法がありますExt.Date.getWeekOfYear(date).
に質問
Ext JSを使えば曜日の問題を完璧に解決できますか?
このシリーズの第1編では、Extのdatepickerは週を見ることができず、自分で拡張する必要があると述べています.
しかし、拡張するときに問題があります.
Javascript言語のDateオブジェクトは毎週日曜日からです.
Ext JSのgetWeekOfYearという方法はISO-8601に従い、毎週月曜日から始まります.(他の方法ではこの基準に従わないものもあり、Ext JSは異なる日時表示基準を混合している).
Ext.Date.getWeekOfYearこのメソッドの戻り値は1-53の間の数です.
すると、いくつかの問題が発生します.
Ext jsの日付表示コントロールの表示は日曜日から:(S M T W T F S(月曜日火曜日..土曜日))
しかし、選択した時間で曜日を取得するのは日曜日からです.結果:
1.毎週日曜日の曜日が1つ小さい(例えば2013/08/18、日曜日、34週間のはずだが、この方法では先週の終わり、33週間と計算される)
 
  
date = new Date("2013/08/18");
var week = Ext.Date.getWeekOfYear(date);
alert("week="+week);

2.Ext Js日付コントロールはデフォルトで42日間表示されます.そうすると、2年間のやりとりの場所で問題が発生します.
その年に53週間表示されたのですか?まだ来年の最初の週です.
ソリューション
jsのDateオブジェクトとExt jsのExt.Dateを組み合わせて、曜日文字列の取得を実現します.
1.毎週日曜日を初日とする
2.毎年の週数は(1-52)から52週を超えると、次の年の最初の週になります.例えば2013/12/29は2013年の53週、2014年の第1週まで
3.「W 1334」のような週のフォーマットを返す
 
  
/*
* return as W1334()2013/08/20
* 1. if sunday==> week = week+1
* getWeekOfYear(Ext use ISO-8601,week begin monday)
* js Date(week begin sunday)
* 2. if week > 52==> year = year +1; week = week - 52;
* 3. if month ==11(12 month) and week <2 ==> year = year +1;
*/
function getWeekStrOfDate(date)
{
var weekStr = null;
if(date!=null)
{
weekStr = "W";
var dateYear = date.getFullYear();
var dateWeek = Ext.Date.getWeekOfYear(date);
var firstDayOfMonth = Ext.Date.getFirstDayOfMonth(date);
var day = date.getDate();
var month = date.getMonth();
//weekday 0-6
var weekday = date.getDay();
if(weekday===0)
{
dateWeek++;
}

// week>52 ==> year +1
if(month==11)
{
if(dateWeek>52)
{
dateYear += 1;
dateWeek -= 52;
}else if(dateWeek<2){
dateYear += 1;
}
}
var yearStr = dateYear.toString();
yearStr = yearStr.substring(2,4);
var dateWeekStr = dateWeek.toString();
if(dateWeekStr.length<2)
{
dateWeekStr = "0" + dateWeekStr;
}
weekStr += yearStr;
weekStr += dateWeekStr;
}
return weekStr;
}