我在 Flex Date 对象中找不到获取一年中第几周的方法(1 到 52)
找到这个的最好方法是什么?对于像 Java 中的 JodaTime 这样的日期操作,是否有任何有用的 flex 库。
我在 Flex Date 对象中找不到获取一年中第几周的方法(1 到 52)
找到这个的最好方法是什么?对于像 Java 中的 JodaTime 这样的日期操作,是否有任何有用的 flex 库。
我不知道图书馆,但这个函数会给你周索引(从零开始)。
function getWeek(date:Date):Number
{
var days:Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var year:Number = date.fullYearUTC;
var isLeap:Boolean = (year % 4 == 0) && (year % 100 != 0)
|| (year % 100 == 0) && (year % 400 == 0);
if(isLeap)
days[1]++;
var d = 0;
//month is conveniently 0 indexed.
for(var i = 0; i < date.month; i++)
d += days[i];
d += date.dateUTC;
var temp:Date = new Date(year, 0, 1);
var jan1:Number = temp.dayUTC;
/**
* If Jan 1st is a Friday (as in 2010), does Mon, 4th Jan
* fall in the first week or the second one?
*
* Comment the next line to make it in first week
* This will effectively make the week start on Friday
* or whatever day Jan 1st of that year is.
**/
d += jan1;
return int(d / 7);
}
我只想指出,上述解决方案存在错误。
for(var i = 0; i < date.month; i++)
应该
for(var i = 0; i < date.monthUTC; i++)
为了正常工作。
不过感谢您的解决方案,它对我帮助很大:)
在 d 除以 7 之前,它应该减 1。否则,星期六将进入下周。
以 2011 年为例,2011 年 1 月 1 日是星期六。它应该是第 0 周,而 1/8/2011 应该是第 1 周。
如果 d 不递减,则 1+6=7/7=1,8+6=14/7=2。所以这些都不对。
我尝试使用 Amarghosh 的函数,但 UTC 值有问题。一年的头几天也是如此。
因此我修改了 jan1 的设置(取决于星期天)和最后一周的计算
这是我使用的函数,基于 Amarghosh 的函数:
public static function getWeek(date:Date):String
{
var days:Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var year:Number = date.fullYear;
var isLeap:Boolean = (year % 4 == 0) && (year % 100 != 0)
|| (year % 100 == 0) && (year % 400 == 0);
if(isLeap)
days[1]++;
var d:Number = 0;
for(var i:int = 0; i < (date.month); i++){
d += days[i];
}
d += date.date;
var temp:Date = new Date(year, 0, 1);
var jan1:Number = temp.day;
if(jan1 == 0) // sunday
jan1 = 7;
d += jan1 - 1;
var week:int = int((d-1) / 7);
if(week == 0) // les premiers jours de l'année
week = 52;
return (week < 10 ? "0" : "") + week;
}