MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: IsoWeek Function


Tks for your attention
I have made some progress, but not enough:

below there is one fast way to get weekDay

weekDayC = Compile[{{ano, _Integer}, {m, _Integer}, {d, _Integer}}
  , Module[{t, y = ano},
   (*2 for Monday*)
   t = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
   y -= Boole[m < 3];
   Mod[y + IntegerPart[y/4.] - IntegerPart[y/100.] + 
     IntegerPart[y/400.] + t[[m]] + d + 1, 7, 1]
   ]
  ]


I used it in my ISOWeek like this

ISOWeekX2[x_] := Module[{baseDate, year454, weekNames, numWeek},
  	year454 = First@DatePlus[x, -Mod[weekDayC @@ x - 1, 7, 1] + 4];
  	baseDate = {year454, 1, 3};
  	numWeek = 
   IntegerPart[
    1/7 (DateDifference[baseDate, x] + weekDayC @@ baseDate + 5)];
  	{year454, numWeek}
  ]

But the there are 2 another slow parts, that are DateDifference and DataPlus. But to get rid of that that is a lot of job..
Native functions would be great...



  • Prev by Date: can somebody help ?
  • Next by Date: Plotting: how does one reverse the time axis tick mark values?
  • Previous by thread: Re: IsoWeek Function
  • Next by thread: Re: IsoWeek Function