Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

udregn ugenumre

11 views
Skip to first unread message

Kurt G.

unread,
Apr 23, 2012, 5:48:48 PM4/23/12
to
Jeg forsøger at lave en kalender og vil gerne have ugenumrene med.
Det er ikke helt enkelt, har jeg fundet ud af!
Jeg har lavet en del eksperimenter, men har ikke fundet noget, der virker
korrekt!
Jeg ved godt, at den første uge i året, hvor torsdag forekommer, er uge 1
her i landet.

Er der her nogen, som har en opskrift!

Mvh Kurt

Birger Sørensen

unread,
Apr 23, 2012, 6:22:52 PM4/23/12
to
Kurt G. forklarede den 23-04-2012:
date('W');
skulle kunne bruges ^^
http://dk2.php.net/manual/en/function.date.php

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://skippersevent.dk


Anders Wegge Keller

unread,
Apr 24, 2012, 1:54:08 AM4/24/12
to
Birger Sørensen <s...@bbsorensen.com> writes:

> Kurt G. forklarede den 23-04-2012:
> > Jeg forsøger at lave en kalender og vil gerne have ugenumrene med.
> > Det er ikke helt enkelt, har jeg fundet ud af!
> > Jeg har lavet en del eksperimenter, men har ikke fundet noget, der
> > virker korrekt!
> > Jeg ved godt, at den første uge i året, hvor torsdag forekommer, er
> > uge 1 her i landet.
> >
> > Er der her nogen, som har en opskrift!
> >
> > Mvh Kurt
>
> date('W');
> skulle kunne bruges ^^
> http://dk2.php.net/manual/en/function.date.php

date("W") giver altid en to-cifret streng, så først på året er der et
foranstillet 0. Det kan godt komme til at se lidt træls ud, og kan
også godt give nogle spøjse resultater, hvis der bliver regnet på det,
så jeg vil foreslå OP at konvertere ugenummeret til en rigtig integer:

$uge_str = date("W", $ts);
$uge_num = (int) $uge_str;


--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Kurt G.

unread,
Apr 24, 2012, 7:23:52 AM4/24/12
to
"Anders Wegge Keller" skrev i meddelelsen
news:8762cpr...@huddi.jernurt.dk...
---------------------------------------------
Tak for svarene.
Jeg kender godt de anførte ting, men har ikke forklaret mig godt nok.
Jeg laver senere en bedre forklaring på mit problem og sender her til.
Har lige i øjeblikket noget arbejde, der skal overståes!
Mvh Kurt

Kurt G.

unread,
Apr 24, 2012, 6:12:11 PM4/24/12
to
Jeg har lavet en uddybning af metode og problem på
http://www.hsra.dk/index.php.
Jeg håber, at det forklaret det bedre.

Mvh Kurt

Bertel Lund Hansen

unread,
Apr 24, 2012, 6:23:24 PM4/24/12
to
Kurt G. skrev:

> Jeg håber, at det forklaret det bedre.

Det forklarer ikke at du vil lave din egen funktion når der
findes en færdig en i PHP.

--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/

Anders Wegge Keller

unread,
Apr 24, 2012, 6:52:28 PM4/24/12
to
Det gik. Jeg skulle lige læse den et par gange, før jeg fangede
pointen, men jeg tror jeg har den nu. Men at svare på spørgsmålet uden
at se koden, er noget vanskeligere...

Men sådan som din algoritme er beskrevet, får du nok et bedre
resultat, hvis din korrektionsfaktor (tallet fra -3 til 3), i stedet
sættes til (datoen for mandag i uge 1) - 1, altså 0 til 3.

Men hvorfor er det at du overhovedet er ude i den her beregning?

Hvis det er fordi du vil have fat i mandag fra måneden inden, kan du
sagtens bruge negative datoer i et kald til mktime. Det vil for maj
måned se ud som følger:

$ts = localtime( mktime( 0, 0, 0, 5, 1, 2012), true);
$ts_ws = localtime( mktime( 0, 0, 0, 5, 2-$ts["tm_wday"] , 2012), true);

ts_ws vil i det her tilfælde så ende med at være 30. april, som du
herefter kan starte fra. Alt andet lige vil det være noget mere
overskueligt, og så slipper du for selv at sidde og rode med antal
dage i en måned, hvor især februar har det med at drille.

Birger Sørensen

unread,
Apr 24, 2012, 7:08:25 PM4/24/12
to
Følgende er skrevet af Kurt G.:
Forstår ikke dit problem.
date(W) returnerer det rigte ugenummer - første torsdag i året er i uge
1.
Måske skal du have rigtig tids-zone også.
date_default_timezone_set('Europe/Copenhagen');

http://sdccms.dk/kalender/
Er på forsøgsstadie - ikke sikker på at bladring virker som det skal.

Anders Wegge Keller

unread,
Apr 24, 2012, 8:28:45 PM4/24/12
to
Birger Sørensen <s...@bbsorensen.com> writes:

> http://sdccms.dk/kalender/
> Er på forsøgsstadie - ikke sikker på at bladring virker som det skal.

Det virker for mig. Men hvorfor har du en hel uge ekstra på begge
sider af løbende måned?

Birger Sørensen

unread,
Apr 25, 2012, 3:25:19 AM4/25/12
to
Anders Wegge Keller formulerede onsdag:
> Birger Sørensen <s...@bbsorensen.com> writes:
>
>> http://sdccms.dk/kalender/
>> Er på forsøgsstadie - ikke sikker på at bladring virker som det skal.
>
> Det virker for mig. Men hvorfor har du en hel uge ekstra på begge
> sider af løbende måned?

Når man er logget ind, kan man have sine egne mærkedage, aftaler etc. i
kalenderen.
Tanken er at kunne "synkronisere" familiens aktiviteter. Og så er det
rart at have i hvert fald den første uge i næste måned med - specielt
når sidste dag i måneden også er sidst på ugen (og første dag i måneden
først på ugen).

Anders Wegge Keller

unread,
Apr 25, 2012, 3:33:40 AM4/25/12
to
Birger Sørensen <s...@bbsorensen.com> writes:

> Tanken er at kunne "synkronisere" familiens aktiviteter. Og så er
> det rart at have i hvert fald den første uge i næste måned med -
> specielt når sidste dag i måneden også er sidst på ugen (og første
> dag i måneden først på ugen).

Ja, den problemstilling er velkendt. Har du overvejet at tilføje et
ekstra sæt kontroller, så man kan rulle en enkelt uge frem og tilbage?

Birger Sørensen

unread,
Apr 25, 2012, 3:44:47 AM4/25/12
to
Anders Wegge Keller tastede følgende:
> Birger Sørensen <s...@bbsorensen.com> writes:
>
>> Tanken er at kunne "synkronisere" familiens aktiviteter. Og så er
>> det rart at have i hvert fald den første uge i næste måned med -
>> specielt når sidste dag i måneden også er sidst på ugen (og første
>> dag i måneden først på ugen).
>
> Ja, den problemstilling er velkendt. Har du overvejet at tilføje et
> ekstra sæt kontroller, så man kan rulle en enkelt uge frem og tilbage?

Nej egentlig ikke...
Scriptet tager udgangspunkt i måneden (valgt eller aktuelle).
Umiddelbart bliver det noget rod, at skulle have et uge-offset også.
Men man skulle måske i virkeligheden bruge uge-nummeret i stedet, og
have et antal uger før/efter, så den aktuelle dato som default altid er
i midten.
Det er bestemt værd at overveje...

Kurt G.

unread,
Apr 25, 2012, 4:33:18 AM4/25/12
to
"Birger Sørensen" skrev i meddelelsen
news:4f97326c$0$281$1472...@news.sunsite.dk...

Følgende er skrevet af Kurt G.:
> Jeg har lavet en uddybning af metode og problem på
> http://www.hsra.dk/index.php.
> Jeg håber, at det forklaret det bedre.
>
> Mvh Kurt

Forstår ikke dit problem.
date(W) returnerer det rigte ugenummer - første torsdag i året er i uge
1.
------------------------------------------------------------------------
Den ville jeg helt sikkert også have brugt, hvis den var nævnt i det hæfte,
som jeg primært har brugt. Det var den ikke, men jeg vil selvfølgelig bruge
den nu!
------------------------------------------------------------------------
Måske skal du have rigtig tids-zone også.
date_default_timezone_set('Europe/Copenhagen');

http://sdccms.dk/kalender/
------------------------------------------------------------------------
Virker fint hos mig.
------------------------------------------------------------------------
Er på forsøgsstadie - ikke sikker på at bladring virker som det skal.

Birger
------------------------------------------------------------------------
Tak for hjælpen.
Kurt

Kurt G.

unread,
Apr 25, 2012, 4:36:32 AM4/25/12
to
"Bertel Lund Hansen" skrev i meddelelsen
news:4f9727b6$0$294$1472...@news.sunsite.dk...
------------------------------------------------------------------------
Det er fordi jeg ikke var opmærksom på funktionen, da jeg startede!
Mvh Kurt

Kurt G.

unread,
Apr 25, 2012, 5:21:54 AM4/25/12
to


"Anders Wegge Keller" skrev i meddelelsen
news:87sjfsp...@huddi.jernurt.dk...

"Kurt G." <kur...@guldbaek.net> writes:

> Jeg har lavet en uddybning af metode og problem på
> http://www.hsra.dk/index.php.
> Jeg håber, at det forklaret det bedre.

Det gik. Jeg skulle lige læse den et par gange, før jeg fangede
pointen, men jeg tror jeg har den nu. Men at svare på spørgsmålet uden
at se koden, er noget vanskeligere...
----------------------------------------------------------------------
Den kan du godt få, men jeg vil nok bruge 'W' til at findu ugenummeret, når
jeg nu kender den!
----------------------------------------------------------------------
Men sådan som din algoritme er beskrevet, får du nok et bedre
resultat, hvis din korrektionsfaktor (tallet fra -3 til 3), i stedet
sættes til (datoen for mandag i uge 1) - 1, altså 0 til 3.

Men hvorfor er det at du overhovedet er ude i den her beregning?

Hvis det er fordi du vil have fat i mandag fra måneden inden,
----------------------------------------------------------------------
Det er det.
----------------------------------------------------------------------
kan du
sagtens bruge negative datoer i et kald til mktime. Det vil for maj
måned se ud som følger:
$ts = localtime( mktime( 0, 0, 0, 5, 1, 2012), true);
$ts_ws = localtime( mktime( 0, 0, 0, 5, 2-$ts["tm_wday"] , 2012), true);

ts_ws vil i det her tilfælde så ende med at være 30. april, som du
herefter kan starte fra. Alt andet lige vil det være noget mere
overskueligt, og så slipper du for selv at sidde og rode med antal
dage i en måned, hvor især februar har det med at drille.

--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*
----------------------------------------------------------------------
Februar er ikke et problem, når man bruger:
$dageiforrigemaaned = mktime(0,0,0,$vismaaned-1,1,$visaar);
$dageiforrigemaaned = date("t", $dageiforrigemaaned);

Jeg vil nok bruge dit forslag, når jeg har kikket på det, så jeg er helt med
på, hvad der sker!

Tak for hjælpen.
Mvh Kurt

Martin

unread,
Apr 25, 2012, 9:00:00 AM4/25/12
to
Jeg forstår ikke hvorfor alle vil de der boks kalendere - de er så
grimme hvis der er en dag der bliver fyldt godt ud.

Sådan en kalender på højkant med 3 mdr fylder ca. det samme som 1 måneds
boks kalender, også synes jeg den er meget nemmere at finde rundt i,
især hvis man maler den i samme farver som den kalender man har på
køleskabet (søndag = helt rødt felt, lørdag = kun rød dato)

Jeg har selvfølgelig ikke noget eksempel lige på stående fod

Christian Kragh

unread,
May 3, 2012, 4:23:58 AM5/3/12
to
Hvordan udregner du helligdage, eller har du selv markeret dem i kalenderen?

Jeg har lavet et script der udregner (godtnok i asp) men du kan bruge
det som inspiration til at generere det dynamisk, det ligger her:
http://5mm.dk/helligdage.asp

--
Venlig hilsen
Christian Kragh
------------------
www.Plantimer.dk
www.HTML-Faq.dk

Birger Sørensen

unread,
May 3, 2012, 5:38:12 AM5/3/12
to
Christian Kragh formulerede spørgsmålet:
> Den 23-04-2012 23:48, Kurt G. skrev:
>> Jeg forsøger at lave en kalender og vil gerne have ugenumrene med.
>> Det er ikke helt enkelt, har jeg fundet ud af!
>> Jeg har lavet en del eksperimenter, men har ikke fundet noget, der
>> virker korrekt!
>> Jeg ved godt, at den første uge i året, hvor torsdag forekommer, er uge
>> 1 her i landet.
>>
>> Er der her nogen, som har en opskrift!
>>
>> Mvh Kurt
>
> Hvordan udregner du helligdage, eller har du selv markeret dem i kalenderen?
>
> Jeg har lavet et script der udregner (godtnok i asp) men du kan bruge det som
> inspiration til at generere det dynamisk, det ligger her:
> http://5mm.dk/helligdage.asp

Interessant og overraskende.
1. maj falder i år på Grundlovsdag: 5-6-2012... ?
:/ ^^

Jeg bruger den her, der returnerer et array med dato, tekst og type.
tekst er navnet på helligdagen, type er er en enum hvor H svarer til
helligdag og N blot er en markering af dagen, som Mors dag f.eks.
(Se evt http://sdccms.dk/kalender/index.php - helligdage er markeret
med røde datoer, andre med gult)

Funktionen DatoSplit finder år, måned og dag fra en dato (tekst) med
formatet Y-m-d H:i:s
function DatoSplit($adate, &$y, &$m, &$d) {
list($dt, $tm) = explode(' ', $adate);
list($y, $m, $d) = explode('-', $dt);
}

Funktionen GetHelligDag() henter faste datoer fra en database, der
indeholder helligdage (og navnedage) med faste datoer - udvælges efter
måned og dato.

Funktionen er måske lidt bagvendt, idet den undersøger om en given dato
er en helligdag eller "navnedag". Hvis det er indeholder det
returnerede array info om dagen - ellers returneres et array bestående
af tomme strenge.

function IsHelligdag($adate) {
$res = array('dato' => '', 'tekst' => '', 'typ' => '');
DatoSplit($adate, $aar, $m, $d);
if (($rez = GetHelligDag($adate)) && (mysqli_num_rows($rez) > 0) &&
($arr = mysqli_fetch_assoc($rez))) {
$res = $arr;
}
if ($res['dato'] == '') { // Fastelavn, Påske, Kr. Himmelfart, Pinse,
Advent
$paaske = easter_days($aar);
switch ($adate) {
case date('Y-m-d', mktime(0, 0, 0, 3, (21-49+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Fastelavn', 'typ' =>
'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-7+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Palmesøndag', 'typ' =>
'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-3+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Skærtorsdag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-2+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Langfredag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Påskedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+1+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Påskedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+26+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Store bededag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+39+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Kristi Himmelfartsdag',
'typ' => 'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+49+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Pinsedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+50+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Pinsedag', 'typ' =>
'H');
break;
}
}
if ($res['dato'] == '') { // Mors dag - 2. søndag i maj
$may1 = date('w', mktime(0, 0, 0, 5, 1, $aar));
$mors_dag = ($may1 == 0) ? 8 : 15-$may1;
$mors = date('Y-m-d', mktime(0, 0, 0, 5, $mors_dag, $aar));
if ($mors == $adate) {
$res = array('dato' => $adate, 'tekst' => 'Mors Dag', 'typ' => 'N');
}
}
if ($res['dato'] == '') { // Advent
$sa = date('w', mktime(0, 0, 0, 12, 24, $aar));
switch ($adate) {
case date('Y-m-d', mktime(0, 0, 0, 12, 24-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '4. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 17-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '3. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 10-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 3-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '1. Søndag i advent',
'typ' => 'N');
break;
}
}
return $res;

Martin

unread,
May 3, 2012, 5:42:28 AM5/3/12
to
On 03-05-2012 10:23, Christian Kragh wrote:
> Den 23-04-2012 23:48, Kurt G. skrev:
>> Jeg forsøger at lave en kalender og vil gerne have ugenumrene med.
>> Det er ikke helt enkelt, har jeg fundet ud af!
>> Jeg har lavet en del eksperimenter, men har ikke fundet noget, der
>> virker korrekt!
>> Jeg ved godt, at den første uge i året, hvor torsdag forekommer, er uge
>> 1 her i landet.
>>
>> Er der her nogen, som har en opskrift!
>>
>> Mvh Kurt
>
> Hvordan udregner du helligdage, eller har du selv markeret dem i
> kalenderen?
>
> Jeg har lavet et script der udregner (godtnok i asp) men du kan bruge
> det som inspiration til at generere det dynamisk, det ligger her:
> http://5mm.dk/helligdage.asp
>

Den bedste i PHP som jeg kender til er

http://pear.php.net/packages.php?catpid=8&catname=Date+and+Time
Alle de pakker der hedder Date_Holidays.

<?php
require_once "Date/Holidays.php";
$germany = &Date_Holidays::factory('Germany', 2004, 'en_EN');
if (Date_Holidays::isError($germany)) {
die('Factory was unable to produce driver-object');
}
$easter = &$germany->getHoliday('easter', 'de_DE');
if (!Date_Holidays::isError($easter)) {
print_r($easter->toArray());
}
?>

Array
(
[internalName] => easter
[title] => Easter Sunday
[date] => date Object
(
[year] => 2004
[month] => 04
[day] => 11
[hour] => 0
[minute] => 0
[second] => 0
[tz] => date_timezone Object
(
[id] => UTC
[longname] => Coordinated Universal Time
[shortname] => UTC
[hasdst] =>
[dstlongname] => Coordinated Universal Time
[dstshortname] => UTC
[offset] => 0
[default] =>
)

)

)


Man kan også

$driver = Date_Holidays::factory('Denmark', 2012);
$date = new Date('2012-04-30');
if ($driver->isHoliday($date)) {
// Vi skal holde fri!
}

Christian Kragh

unread,
May 3, 2012, 5:45:48 AM5/3/12
to
>> Hvordan udregner du helligdage, eller har du selv markeret dem i
>> kalenderen?
>>
>> Jeg har lavet et script der udregner (godtnok i asp) men du kan bruge
>> det som inspiration til at generere det dynamisk, det ligger her:
>> http://5mm.dk/helligdage.asp

> Interessant og overraskende.
> 1. maj falder i år på Grundlovsdag: 5-6-2012... ?

Ja, det er jo nok en fejl fra min side, jeg har rettet det nu...
Hvorfor har jeg ikke fanget den før, kan jeg ikke sige, men den er
rigtig nok på de sider jeg har brugt den, så det må være i
kodebiblioteket den lå forkert. :(
0 new messages