而Ext JS的getWeekOfYear这个方法却又是遵循 ISO-8601, 每周是从星期一开始的。(其他的方法又有不是遵循此标准的, Ext JS混合了不同的日期时间表示标准)。
Ext.Date.getWeekOfYear 这个方法的返回值是 1- 53 之间的数。
这样的话, 就会出现一些问题:
Ext js 的日期显示控件的显示是从星期天开始: (S M T W T F S (星期天 星期一 星期二 .. 星期六))
但是, 通过选中的时间获取星期时却又是从星期天开始。导致:
每个星期天的星期会小1 (比如2013/08/18 , 星期天, 应该是34周,但是通过这个方法却是算成上一周的结尾 , 33 周)
date = new Date("2013/08/18");
var week = Ext.Date.getWeekOfYear(date);
alert("week="+week);
Ext Js 日期控件默认显示了 42天, 这样的话,在两个年交互的地方就会出现问题
是当年显示 53 周呢? 还是下一年的第一周。
2.解决方案:
结合js 的Date 对象和 Ext js的Ext.Date, 实现获取星期字串。
每周以星期天为第一天
每年的周数从(1-52), 如果超过52 周,算到下一年的第一周。 比如2013/12/29 为 2013年的53周, 算到 2014年的第一周
返回 “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 = 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; }
您可能感兴趣的文章: