Avatar billede andersthingholm Nybegynder
19. februar 2004 - 12:34 Der er 16 kommentarer og
1 løsning

Problem med uge-funktion

Hej,

Barklund har hjulpet mig med denne funktion:

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay();
    return Math.round(d/7)+1;
};
Date.prototype.getDayOfYear = function() {
    var m = this.getMonth();
    var d = this.getDate();
    if (this.isLeapYear && this.month>2) {
        d++;
    }
    var i = m;
    while (i--) {
        d += this.$_months[i];
    }
    return d;
};
Date.prototype.isLeapYear = function() {
    var y = this.getYear();
    return (y%4 == 0 && y%100 != 0) || y%400 == 0;
};
Date.prototype.getDayDiff = function(other_date) {
    return Math.ceil(((this.getTime()-other_date.getTime())/(24*60*60*1000)*-1)+1);
};
Date.prototype.$_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
month_shortNames = ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];
week_shortNames = ["s", "m", "t", "o", "t", "f", "l"];
ASSetPropFlags(Date.prototype, null, 1, 0);


currentDate = new Date();
for (i=1; i<=10; i++) {
    next_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+i-1);
    trace(next_date+ " - uge: "+next_date.getWeek())
}

Men ovenstående kode returnerer dette:

Thu Feb 19 00:00:00 GMT+0100 2004 - uge: 8
Fri Feb 20 00:00:00 GMT+0100 2004 - uge: 8
Sat Feb 21 00:00:00 GMT+0100 2004 - uge: 8
Sun Feb 22 00:00:00 GMT+0100 2004 - uge: 9
Mon Feb 23 00:00:00 GMT+0100 2004 - uge: 9
Tue Feb 24 00:00:00 GMT+0100 2004 - uge: 9
Wed Feb 25 00:00:00 GMT+0100 2004 - uge: 9
Thu Feb 26 00:00:00 GMT+0100 2004 - uge: 9
Fri Feb 27 00:00:00 GMT+0100 2004 - uge: 9
Sat Feb 28 00:00:00 GMT+0100 2004 - uge: 9

Som det kan ses er der en fejl... Sun Feb 22 er f.eks. ikke uge 9, men uge 8.

Er der nogen, der kan hjælpe med at rette den til ?
Avatar billede barklund Nybegynder
19. februar 2004 - 13:02 #1
Her:

var d = this.getDayOfYear()-this.getDay();

Skal du enten sige -1 eller +1 til sidst - det kan jeg ikke lige overskue ;)
Avatar billede andersthingholm Nybegynder
19. februar 2004 - 13:08 #2
Hej igen,

Den ligger jo oppe i:

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay();
    return Math.round(d/7)+1;
};

Jeg har prøvet med:

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay()+1;
    return Math.round(d/7)+1;
};

og

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay()-1;
    return Math.round(d/7)+1;
};

Men uden held...
Avatar billede barklund Nybegynder
19. februar 2004 - 14:27 #3
Sikker? giver det ingen ændring?
Avatar billede barklund Nybegynder
19. februar 2004 - 14:29 #4
Vil du se et grimt hack?

var t, d = this.getDayOfYear()-((t=this.getDay()) == 0 ? 7 : t);
Avatar billede barklund Nybegynder
19. februar 2004 - 14:29 #5
Tihi :)
Avatar billede barklund Nybegynder
19. februar 2004 - 14:36 #6
Og den virker ikke helt over årsskifter... første torsdag hvet år ligger ALTID i uge 1... det tager den ikke højde for...
Avatar billede andersthingholm Nybegynder
19. februar 2004 - 15:30 #7
Ja, jeg er sikker :-)

Disse 2 skiller stadig ugen forkert.

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay()+1;
    return Math.round(d/7)+1;
};

Thu Feb 19 00:00:00 GMT+0100 2004 - uge: 7
Fri Feb 20 00:00:00 GMT+0100 2004 - uge: 7
Sat Feb 21 00:00:00 GMT+0100 2004 - uge: 7
Sun Feb 22 00:00:00 GMT+0100 2004 - uge: 8
Mon Feb 23 00:00:00 GMT+0100 2004 - uge: 8
Tue Feb 24 00:00:00 GMT+0100 2004 - uge: 8
Wed Feb 25 00:00:00 GMT+0100 2004 - uge: 8
Thu Feb 26 00:00:00 GMT+0100 2004 - uge: 8
Fri Feb 27 00:00:00 GMT+0100 2004 - uge: 8
Sat Feb 28 00:00:00 GMT+0100 2004 - uge: 8


og

Date.prototype.getWeek = function() {
    var d = this.getDayOfYear()-this.getDay()-1;
    return Math.round(d/7)+1;
};

Thu Feb 19 00:00:00 GMT+0100 2004 - uge: 6
Fri Feb 20 00:00:00 GMT+0100 2004 - uge: 6
Sat Feb 21 00:00:00 GMT+0100 2004 - uge: 6
Sun Feb 22 00:00:00 GMT+0100 2004 - uge: 7
Mon Feb 23 00:00:00 GMT+0100 2004 - uge: 7
Tue Feb 24 00:00:00 GMT+0100 2004 - uge: 7
Wed Feb 25 00:00:00 GMT+0100 2004 - uge: 7
Thu Feb 26 00:00:00 GMT+0100 2004 - uge: 7
Fri Feb 27 00:00:00 GMT+0100 2004 - uge: 7
Sat Feb 28 00:00:00 GMT+0100 2004 - uge: 7

Den sætter søndag til altid at være i næste uge. Jeg vil gerne have søndagen i samme uge.
Avatar billede barklund Nybegynder
19. februar 2004 - 16:14 #8
Men blev det ikke løst med ovenstående andet hack?
Avatar billede andersthingholm Nybegynder
19. februar 2004 - 16:21 #9
Nej, ikke helt:

Date.prototype.getWeek = function() {
    var t, d = this.getDayOfYear()-((t=this.getDay()) == 0 ? 7 : t);
    return Math.round(d/7)+1;
};
Date.prototype.getDayOfYear = function() {
    var m = this.getMonth();
    var d = this.getDate();
    if (this.isLeapYear && this.month>2) {
        d++;
    }
    var i = m;
    while (i--) {
        d += this.$_months[i];
    }
    return d;
};
Date.prototype.isLeapYear = function() {
    var y = this.getYear();
    return (y%4 == 0 && y%100 != 0) || y%400 == 0;
};
Date.prototype.getDayDiff = function(other_date) {
    return Math.ceil(((this.getTime()-other_date.getTime())/(24*60*60*1000)*-1)+1);
};
Date.prototype.$_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
month_shortNames = ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];
week_shortNames = ["s", "m", "t", "o", "t", "f", "l"];
ASSetPropFlags(Date.prototype, null, 1, 0);


currentDate = new Date();
for (i=1; i<=30; i++) {
    next_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+i-1);
    trace(next_date+ " - uge: "+next_date.getWeek())
}

Thu Feb 19 00:00:00 GMT+0100 2004 - uge: 8
Fri Feb 20 00:00:00 GMT+0100 2004 - uge: 8
Sat Feb 21 00:00:00 GMT+0100 2004 - uge: 8
Sun Feb 22 00:00:00 GMT+0100 2004 - uge: 8
Mon Feb 23 00:00:00 GMT+0100 2004 - uge: 9
Tue Feb 24 00:00:00 GMT+0100 2004 - uge: 9
Wed Feb 25 00:00:00 GMT+0100 2004 - uge: 9
Thu Feb 26 00:00:00 GMT+0100 2004 - uge: 9
Fri Feb 27 00:00:00 GMT+0100 2004 - uge: 9
Sat Feb 28 00:00:00 GMT+0100 2004 - uge: 9
Sun Feb 29 00:00:00 GMT+0100 2004 - uge: 9
Mon Mar 1 00:00:00 GMT+0100 2004 - uge: 9
Tue Mar 2 00:00:00 GMT+0100 2004 - uge: 9
Wed Mar 3 00:00:00 GMT+0100 2004 - uge: 9
Thu Mar 4 00:00:00 GMT+0100 2004 - uge: 9
Fri Mar 5 00:00:00 GMT+0100 2004 - uge: 9
Sat Mar 6 00:00:00 GMT+0100 2004 - uge: 9
Sun Mar 7 00:00:00 GMT+0100 2004 - uge: 9
Mon Mar 8 00:00:00 GMT+0100 2004 - uge: 10
Tue Mar 9 00:00:00 GMT+0100 2004 - uge: 10
Wed Mar 10 00:00:00 GMT+0100 2004 - uge: 10
Thu Mar 11 00:00:00 GMT+0100 2004 - uge: 10
Fri Mar 12 00:00:00 GMT+0100 2004 - uge: 10
Sat Mar 13 00:00:00 GMT+0100 2004 - uge: 10
Sun Mar 14 00:00:00 GMT+0100 2004 - uge: 10
Mon Mar 15 00:00:00 GMT+0100 2004 - uge: 11
Tue Mar 16 00:00:00 GMT+0100 2004 - uge: 11
Wed Mar 17 00:00:00 GMT+0100 2004 - uge: 11
Thu Mar 18 00:00:00 GMT+0100 2004 - uge: 11
Fri Mar 19 00:00:00 GMT+0100 2004 - uge: 11
Avatar billede andersthingholm Nybegynder
19. februar 2004 - 16:21 #10
Lidt for mange uge 9 :-)
Avatar billede andersthingholm Nybegynder
19. februar 2004 - 23:15 #11
Kan du se problemet ?
Avatar billede barklund Nybegynder
22. februar 2004 - 16:52 #12
Fejl i getDayOfYear:

Date.prototype.getDayOfYear = function() {
    var m = this.getMonth();
    var d = this.getDate();
    if (this.isLeapYear() && m>2) {
        d++;
    }
    while (m--) {
        d += this.$_months[m];
    }
    return d;
};
Avatar billede andersthingholm Nybegynder
22. februar 2004 - 21:33 #13
Hej igen,

Den fåkker stadigvæk op :-(
Avatar billede barklund Nybegynder
23. februar 2004 - 14:59 #14
if (this.isLeapYear() && m>1) {
Avatar billede andersthingholm Nybegynder
23. februar 2004 - 15:02 #15
smukt!
Avatar billede barklund Nybegynder
23. februar 2004 - 15:37 #16
Ja, marts er jo uge 2 i actionscript - derfor >1 og ikke >2... :)
Avatar billede barklund Nybegynder
23. februar 2004 - 15:38 #17
Tark for points ;)
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