首頁 >web前端 >js教程 >Ext JS 4實作帶week(星期)的日期選擇控制項(實戰二)_extjs

Ext JS 4實作帶week(星期)的日期選擇控制項(實戰二)_extjs

WBOY
WBOY原創
2016-05-16 17:24:591166瀏覽
前言

JavaScript 中的日期和時間
Ext JS 4實作帶week(星期)的日期選擇控制項(實戰一)

如對本篇的一些預備知識需詳盡了解,可參考以上兩篇。
Javascript 有提供Date 物件處理時間。但是Date 並沒有提供獲得星期的方法。
要在web 端透過js 方式取得某個時間是這一年的第幾個星期,可以根據一些演算法去實現。 當然, jquery 的擴展組件 等有直接提供這樣的一些現成包。
像Ext js 就有提供取得星期的方法Ext.Date.getWeekOfYear(date).

問題

是否使用了Ext JS 就可以完美的解決星期的問題呢?
在本系列的第一篇就說過, 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/188) ;
var week = Ext.Date.getWeekOfYear(date);
alert("week=" week);

2. Ext Js 日期控制預設顯示了42天, 這樣預設顯示的話,在兩個年交互的地方就會出現問題

是當年顯示53 週呢? 還是下一年的第一周。



結合js 的Date 物件和 Ext js的Ext.Date, 實作取得星期字串。
1. 每週以星期日為第一天
2. 每年的周數從(1-52), 如果超過52 週,算到下一年的第一週。 例如2013/12/29 為2013年的53週, 算到2014年的第一周
3. 返回“W1334” 這樣的周的格式
複製程式碼 程式碼如下:

/*
* 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 week 🎜>* 2. if week > 52==> year week year 1; = week - 52;
* 3. if month ==11(12 month) and week 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(dateWeekdateYear = 1;
}
}
var yearStr = dateYear.toString();
yearStr = yearStr.substring(2,4444 );
var dateWeekStr = dateWeek.toString();
if(dateWeekStr.length{
dateWeekStr = "0" dateWeekStr;
} weStryStrat; weekStr = dateWeekStr; } return weekStr; }
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn