4

Flex Date オブジェクトで週を取得するメソッドが見つかりませんでした (1 から 52)

これを見つける最良の方法は何ですか?Java の JodaTime のような日付操作のためのフレックス用の便利なライブラリはありますか?

4

4 に答える 4

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);
}
于 2010-03-02T12:23:04.207 に答える
1

dを7で割る前に、1ずつ減らす必要があります。そうでない場合、土曜日は翌週になります。

2011年を例にとると、2011年1月1日は土曜日です。0週で、2011年1月8日は1週である必要があります。

dがデクリメントされていない場合、1 + 6 = 7/7 = 1、および8 + 6 = 14/7=2です。したがって、これらは正しくありません。

于 2011-04-13T23:17:07.490 に答える
1

Amarghosh の関数を使用しようとしましたが、UTC 値に問題がありました。そして、年の最初の日にも。

そのため、jan1の設定(日曜日によって異なります)と最終週の計算を変更しました

アマーゴッシュの関数に基づいて、私が使用する関数は次のとおりです。

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;

}
于 2011-09-22T13:36:36.760 に答える
1

上記のソリューションにはエラーがあることを指摘したいだけです。

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

する必要があります

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

適切に機能するために。

それにもかかわらず、解決策をありがとう、それは私を大いに助けました:)

于 2010-11-08T11:05:32.437 に答える