Solved

Week Calculating Based On What Day The Week Start.

Posted on 2006-06-13
8
249 Views
Last Modified: 2010-04-04
HI PLEASE I NEED SOME EXPERT HELP.........

I HAVE a big problem, and  I dont know how to do it..

I need a week number for a given date. For Example my calendar works as follows.
Sometimes the  WEEK STARTS on a Saturday, Sometimes The Week begins on a Friday.

Now for example if the Date is Between 7 Jan and 14 Jan 2006 the week number must be 1 (this if if the week starts on a saturday)
If the date is between Feb 4 and Feb 11 2006  the week number must be 5 (also week starts on saturday)
If the date is between Feb 3 and Feb 10 2006  the week number must be 5 (NOW WEEK STARTS ON A FRIDAY)
OR If the date is between March 31 and April 7 2006  the week number must be 13 (NOW WEEK STARTS ON A FRIDAY)

Please how do i calculate the week number depending on what day of the week it starts. MY first week in the Year starts on a Saturday
or Friday. eg. for 2006 the first week must be Jan 6 - Jan 13 and week 52 must be Dec 29 - Jan 5 (Friday)

For 2007  first week will be Jan 5 - Jan 12 is firstweek (friday)

If week starts on Saturday then  2006  first week will be Jan 7 - 14 Jan
and week 52 will be Dec 31 - Jan 7


Thank you  VERY MUCH

0
Comment
Question by:henryreynolds
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
8 Comments
 
LVL 28

Expert Comment

by:2266180
ID: 16893944
hi.

here is the function and test app:

function myweekofyear(dat:tdatetime; dayofweekstart:byte):byte;
var dd:word;
begin
  dd:=DaysBetween(StartOfTheYear(dat),dat)+1;
  dd:=dd-dayofweekstart+1;
  result:=(dd div 7)+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  showmessage(inttostr(myweekofyear(strtodate('03/31/2006'),5)));
end;
0
 

Author Comment

by:henryreynolds
ID: 16894378
Ciuly THANK YOU, THANK YOU,
Really i dont know how to thank you, This is working perfect YOU earn all your points

Thanx

Henry

South Africa
0
 

Author Comment

by:henryreynolds
ID: 16894442
Sorry Ciuly you impressed me so much, for the same principal now
can I turn this also around and pass the week again and get the Satuday Date or Friday Date
for that week, how can I do it the other away around.

eg i pass 23/2006 then it must return Jun 10 - Jun 17 for saturdays
and  23/2006 Jun 9 - Jun 16 for fridays

THANK YOU YOUR ARE THE BEST

henry
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 28

Expert Comment

by:2266180
ID: 16895107
I think there is an error in my initial code. there is a 6 day shift I am correct (didn't investigated too much).
here is the corrected code for that, and the one for your second request:
function myweekofyear(dat:tdatetime; dayofweekstart:byte):byte;
var dd:word; ddd:tdatetime;
begin
  ddd:=StartOfTheYear(dat);
  dd:=DaysBetween(ddd,dat);
  while DayOfWeek(ddd) <> dayofweekstart do
  begin
    ddd:=IncDay(ddd);
    dec(dd);
  end;
  result:=(dd div 7)+1;
end;

function mydateforweek(week:byte; year:word; dayofweekstart:byte):TDateTime;
var dd:word; ddd:tdatetime;
begin
  ddd:=StartOfAYear(year);
  while dayofweek(ddd) <> dayofweekstart do
    ddd:=incday(ddd);
  ddd:=incday(ddd,(week-1)*7);
  result:=ddd;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//  showmessage(inttostr(myweekofyear(strtodate('01/12/2006'),5)));
  showmessage(datetostr(mydateforweek(2,2006,5)));
end;
0
 

Author Comment

by:henryreynolds
ID: 16896251
Hi ciuly

I just want to thank you again, ITS GREAT thanx, thanx,
its' perfect, its exactly what I needed..

Thank you, have a good day

Henry
South Africa
0
 
LVL 12

Accepted Solution

by:
AmigoJack earned 500 total points
ID: 16900291
uhm, i dont want to complain, but this look too simple. weeks dont always start with 1 on the beginning of the year. the years first week is the one which has the thursday in it (ISO). based on the years borders its also a question if 2006-12-31 is week 52, week 53 or even week 1 AND if 2007-01-01 is really week 1 or week 52 or week 53.
0
 

Author Comment

by:henryreynolds
ID: 16909152
Hi sorry I MAD A MISTAKE, I ACCEPTED on the wrong experts name,  ciuly MUST GET ALL THE POINTS
how do a reverse my accept to select ciuly .


Thanx please change it to ciuly


0
 
LVL 28

Expert Comment

by:2266180
ID: 16909291
:) just make a request (open a question) in community support asking for this
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Suggested Courses
Course of the Month10 days, 13 hours left to enroll

628 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question