Avatar billede simsen Mester
01. december 2011 - 15:03 Der er 9 kommentarer og
1 løsning

Bergne uge i en måned

Hej,

Jeg har udfra en given dato brug for at beregne om dagen i datoen er den første, anden, trejde, fjerde (og af og til) femte uge i en måned.

Altså hvis vi tager den 15/12-2012 - så vil det give mig uge nr. 3 og den 29/12-2012 skal give mig 5 retur. Det med den sidste uge, har jeg ikke lige helt styr på - for den skal sættes til sidste uge og ikke uge 5.....

Men lige nu har jeg brug for at kunne beregne den og aner ikke hvordan - så langt jeg er kommet i min metode er følgende:

private int CalculateWeekNoInMonth(DateTime date)
        {
            int count = 0;

            int month = date.Month;
            int year = date.Year;

            return count;
        }

Håber nogen kan hjælpe mig - for jeg er lidt lost her....Jeg kan forestille mig, jeg (derfor min count) at jeg skal loope mig igennem hele måneden og så tælle antal den støder på dagen.
Avatar billede Syska Mester
01. december 2011 - 15:52 #1
Er det hele uger i en måned for at det tæller som 1?
Dvs hvis den 1/12 er en søndag, og den 2/12 så uge 2?

mvh
Avatar billede Syska Mester
01. december 2011 - 16:00 #2
Kan du ikke bare tage:

var weekNumberInMonth = date.Day / 7 + 1;

Overstående virker for dine 2 datoer.

mvh
Avatar billede Syska Mester
01. december 2011 - 16:03 #3
Ups, der er vist edge case hvis den første i en måned er en mandag.

7/1 ... 1/1 er en mandag, dvs 7/1 er en søndag, så er vi stadig i uge 1.
Avatar billede simsen Mester
01. december 2011 - 16:11 #4
En bruger taster ind i en database han vil have noget til at ske den 1. og 3. torsdag i december...... her siger han så torsdag og 1,3

Nu vil jeg så hver torsdag finde ud af om det er den 1. eller 3. uge i den måned.......

Her i december og i dag, vil det jo være sandt.....torsdag er den 1. uge....

Sætter han datoen den 8/12 så vil udsagnet blive forkert, da det ikke er den 1. eller 3. torsdag i en måned....

Jeg har styr på at det er en torsdag (den skal måske med en som parameter?)...

Men det jeg har brug for at date = 02/12/2012.

Den skal nu beregne om den 02 (som jo er en fredag) er den første, anden, treide, fjerde eller femte uge i den pågældende måned....

Håber jeg ikke har forvirret dig med min indviklede forklaring :-)
Avatar billede Syska Mester
01. december 2011 - 16:18 #5
Se på mine andre kommentarer ... det burde virke som jeg lige kan se det.
Avatar billede simsen Mester
02. december 2011 - 08:49 #6
Hej buzzzz

Sorry - læste det ups som at du fortrød dit forslag og ville have en uddybning fra mig. Den virker - tak.

Kan du også hjælpe mig med mit problem med at finde ud af om datoen er sidste uge i en måned.

Altså brugeren har en option hvor de kan vælge sidste fredag i en måned f.eks. (de giver en dato ind og nu skal jeg så finde frem til om jeg skal hente en bestemt linje ud) - den skal kun hentes ud, hvis datoen er den sidste i en måned....

Det er nok nemmere at se, hvad jeg vil, hvis du ser min kode;

if (sch.Month != null)
                    {
                        for (int j = 0; j != sch.Month.Length; j++)
                        {
                            //er ordren aktuel i date måned
                            if (date.Month == sch.Month[j])
                            {
                                //er day of month lig day of month i date
                                if (sch.DayOfMonth.Length != 0)
                                {
                                    for (int k = 0; k != sch.DayOfMonth.Length; k++)
                                    {
                                        if (sch.DayOfMonth[k] == date.Day)
                                        {
                                            ToBeExecutedByDate(sch.Id, date, costLocationId);
                                            // m_scheduleId.Add(sch.Id);
                                            breaked = true;
                                            break;
                                        }
                                    }
                                }
                                else if (sch.DayOfWeek.Length != 0)
                                {
                                    //Test af om dayofweek sat
                                    for (int l = 0; l != sch.DayOfWeek.Length; l++)
                                    {
                                        //Test om  ugen er lig med denne uge
                                        for (int m = 0; m != sch.WeekOfMonth.Length; m++)
                                        {
                                            string test = sch.WeekOfMonth[m].ToString();
                                                                                       
                                            //ugenr. i måned
                                            int weekNo = CalculateWeekNoInMonth(date);

                                            if (sch.WeekOfMonth[m] != 5)
                                            {
                                                if (sch.WeekOfMonth[m] == weekNo)
                                                {
                                                    //er denne valgfri, eller lig dag i date så tilføj til m_schedule
                                                    if (sch.DayOfWeek[l] == 0)
                                                    {
                                                        ToBeExecutedByOptionelDay(sch.Id, date, costLocationId);
                                                        //m_scheduleId.Add(sch.Id);
                                                        breaked = true;
                                                        break;
                                                    }
                                                    dayOfWeek = sch.DayOfWeek[l];
                                                    if (dayOfWeek == 7)
                                                    {
                                                        dayOfWeek = 0;
                                                    }
                                                    if (dayOfWeek == (int)date.DayOfWeek)
                                                    {
                                                        ToBeExecutedByDate(sch.Id, date, costLocationId);
                                                        //m_scheduleId.Add(sch.Id);

                                                        breaked = true;
                                                        break;
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                //Her skal jeg nu teste om date er sidste uge i en måned - altså om dagen er den sidste dag i en måned
                                            }
                                           
                                        }
                                    }
                                }
                                if (breaked)
                                    break;
                            }
                        }

Det er sidste del, jeg nu har problemer med at finde ud af om datoen er sidste uge i en måned
Avatar billede simsen Mester
02. december 2011 - 10:44 #7
Jeg tror, jeg har løsningen - men du må meget gerne lige se om det er den :-)

bool isInLastWeek = false;
            if (date.AddDays(7).Month != date.Month)
                isInLastWeek = true;
            return isInLastWeek;


Og smid et svar og tak for hjælpen :-)
Avatar billede Syska Mester
02. december 2011 - 12:11 #8
Tag næste måned og træk en dag fra, så burde du få sidste dag i måneden.

her er en test der viser det:
[Test]
public void should_be_removed()
{
    var time = new DateTime(2012, 1, 1, 0, 0, 0);

    var dateTime = time.AddDays(-1);

    dateTime.Day.Should().Be(31);
    dateTime.Month.Should().Be(12);
    dateTime.Year.Should().Be(2011);
}
Avatar billede clausc Nybegynder
02. december 2011 - 14:50 #9
Avatar billede Syska Mester
02. december 2011 - 18:51 #10
Ja, men her er der jo snak om at dele en måned op i uger(teknisk set) og ikke så meget hvad uger nummer vi har i nuværende år.

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester