Flex,如何获得约会的一周?

时间:2010-03-02 12:12:33

标签: flex date actionscript week-number

我在Flex Date对象中找不到一个方法来获取一年中的一周(1到52)

找到这个的最佳方法是什么?对于诸如Java中的JodaTime这样的日期操作,是否有任何有用的flex库。

4 个答案:

答案 0 :(得分:5)

我不知道一个库,但是这个函数会给你一周索引(基于零)。

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);
}

答案 1 :(得分:1)

我只想指出上述解决方案中存在错误。

for(var i = 0; i < date.month; i++)

应该是

for(var i = 0; i < date.monthUTC; i++)

为了正常工作。

尽管如此,感谢解决方案,它对我帮助很大:)

答案 2 :(得分:1)

在d除以7之前,应该减去1.否则,星期六会到下周。

以2011年为例,2011年1月1日是星期六。它应该是0周,2011年1月8日应该是第1周。

如果d没有递减, 然后1 + 6 = 7/7 = 1,并且8 + 6 = 14/7 = 2。所以这些都不正确。

答案 3 :(得分:1)

我尝试使用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;

}