Avatar billede haolan Nybegynder
16. april 2007 - 21:04 Der er 55 kommentarer og
1 løsning

Nedtæl ugenr og År

Hej eksperter

Jeg er ved at lave noget kalender agtigt værk hvor man kan navigere frem og tilbage i ugerne.

I min URL har jeg en year og en week, så man fx får:

pages.php?year=2007&week=16

Men hvis man nu står på year 2007 og week 1 og tæller en ned, hvordan får jeg den så til at springe et år og et ugenummer ned?

Jeg kunne jo snildt komme gennem det ved at trække 1 fra året og lave noget if der tjekker på at ugenr er 1 og hvis ja kunne den springe ned på uge 52.. Men nogle år er der jo 53 uger, hvordan gør man så?
Avatar billede jakobdo Ekspert
16. april 2007 - 21:46 #1
Jeg tror du skal kigge på mktime() og date('W');
Avatar billede haolan Nybegynder
16. april 2007 - 21:59 #2
Hvordan mener du?
Avatar billede jakobdo Ekspert
16. april 2007 - 22:04 #3
Altså du kan bruge mktime() til at lave en dato på året!
F.eks.:
$myYear = '2006'; //2005, 2007 osv...
$year = mktime(0,0,0,1,1,$myYear);
echo 'Der er antal uger : ' . date('W',$year);
Avatar billede jakobdo Ekspert
16. april 2007 - 22:04 #4
Og så er det "bare" at lave noget kode som selvfølgelig tjekker om år 1 - 1 skal være lige med max antal uger året får og omvendt.
Avatar billede haolan Nybegynder
16. april 2007 - 22:18 #5
Ja ok.. der er bare lige et lille problem med det du sendte :)

Der er kun 1 uge i år 2007 - 2008 og 2009.. I år 2010 er der 53 uger og i år 2006 er der 52 uger
Avatar billede jakobdo Ekspert
16. april 2007 - 22:51 #6
Du skal bruge strftime();

Se koden her:

<?php
//http://www.eksperten.dk/spm/773620

for($i=1990; $i <= 2010; $i++)
{
    $year = mktime(1,1,1,12,31,$i);
    echo '&Aring;r har antal uger : ' . strftime('%W',$year) . '<br />';
}

?>
Avatar billede johan.o Nybegynder
16. april 2007 - 23:28 #7
Jeg tror det ville være bedre at gå bort fra ugenumre og årstal i din url, istedet vil jeg anbefale at du bruger et relativt reference i forhold til idag....

Det 'fede' ved mktime() funktionen er at den kan lægge f.eks. 40 dage til en dato og så selv regne ud at måneden skifter og måske også året...eksempelvis..

echo strftime("%B", mktime(0, 0, 0, date("m"), date("d")+60, date("Y")));

skulle gerne skrive noget ala Juni...altså holder den selv styr på måneder, år osv..

..så du kan lave en url der ser sådan her ud...

minside.php?var=10

..og så kan det f.eks. betyde at det er en dato 10 uger ude i fremtiden du leder efter..

echo strftime("%d %B %Y", mktime(0, 0, 0, date("m"), date("d")+(7*$_GET['var']), date("Y")));

Håber du kan bruge det til noget :)

Mvh. Johan
Avatar billede haolan Nybegynder
16. april 2007 - 23:30 #8
Kan nu stadig ikke få den til at passe..

se http://sportal.vivaa.dk/test.php - År 2009 er der 53 uger.. Det står der ikke der, år 2012 er der også 53, det står der dog rigtigt nok..
Avatar billede haolan Nybegynder
16. april 2007 - 23:44 #9
johan >> hvordan vil du så "bladre" igennem ugerne på den måde?
Avatar billede jakobdo Ekspert
17. april 2007 - 08:55 #10
Avatar billede johan.o Nybegynder
17. april 2007 - 09:03 #11
Hvis minside.php?var=0 er denne uge kan du lave to link der hedder..

$oVar=$_GET['var'];
<a href="minside.php?var=".($oVar+1).">Næste uge</a>
<a href="minside.php?var=".($oVar-1).">Forrige uge</a>

Så kan du f.eks. gøre sådan her..

$today=strftime("%u")-1;
$first=mktime(0, 0, 0, date("m"), date("d")-($today)+(7*$oVar), date("Y"));
$last=mktime(0, 0, 0, date("m"), date("d")+(7-$today)+(7*$oVar), date("Y"));

Så skulle $first gerne være timestamp for...

Mandag den uge der er valgt klokken 00:00:00

Og $last skulle gerne være..

Mandagen efter klokken 00:00:00

Mvh. Johan
Avatar billede haolan Nybegynder
17. april 2007 - 20:23 #12
så fik jeg den til at virke med Johans forslag :)

Men johan hvad nu hvis jeg vil springe til en bestemt uge fx fra nogle select bokse hvor man vælger fx uge 3 år 2001.. Hvordan får jeg så den rigtige "var" værdi for netop den uge?
Avatar billede nixir Nybegynder
17. april 2007 - 20:26 #13
Nu ved jeg ikke hvad det hele skal bruges til, men hvis du laver den relativ ud i fremtiden (ligesom johan.o foreslår), så vil det ikke være muligt at benytte det samme link om ex 2 uger, da standard udgangspunkt-tiden har rykket sig.

Så hvis man skal kunne henvise til siden, så fungerer det vel ikke i praksis uden at komplicerer mere end højst nødvendigt (og lave alternative links - men så ryger idéen når man har to måder at hente sit resultat).

Jeg kan ikke se hvorfor mktime ikke kan benyttes sammen med year og en dato. Så man finder uge-nr. ud fra en dato, og når man klikker rundt i ugerne på siden, sætter man den til at linke til mandagen ugen efter. Skal man en uge frem, lægger man 7 dage til den aktuelle dato - og trækker fra når man skal tilbage.

Kan ikke lige gennemskue at det ikke skulle virke, men er lidt omtumlet i dag - har fået pillet lidt ved balance-nerven i mine ører i dag, hvis det siger nogen noget ;)
Avatar billede nixir Nybegynder
17. april 2007 - 20:29 #14
Hov ... dermed kunne man lave et link i stil med:

pages.php?year=2007&date=0120

På dansk: 20/01-2007
På engelsk: 01/20-2007

Find week via:
strtime -> mktime -> date

Burde lige lige til højre-benet - (samme forbehold som i mit indlæg for 1 min siden)
Avatar billede jakobdo Ekspert
17. april 2007 - 20:40 #15
Jeg ville nu hellere lave: pages.php?year=2007&day=17&month=4
Så er det da til at forstå! :o)
Avatar billede haolan Nybegynder
17. april 2007 - 20:51 #16
har selv forsøgt lidt med at smide month og year ind i en mktime, men kunne ikke rigtig få den til at virke ordentligt :S
Avatar billede haolan Nybegynder
17. april 2007 - 20:53 #17
Koden jeg har ser PT ud, som nedenstående og virker fint.. Men jeg vil som jer andre, nok foretrække  at få Year og Week frem i linien foroven, både for brugervenligheden og for mig selv, så man lettere kan gå tilbage i tiden, men hvordan? :)

        $oVar = $_GET['var'];
        echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&var=".($oVar-1)."'><<</a><b> ";

        $today=strftime("%u")-1;
        $first=mktime(0, 0, 0, date("m"), date("d")-($today)+(7*$oVar), date("Y"));
        //$last=mktime(0, 0, 0, date("m"), date("d")+(7-$today)+(7*$oVar), date("Y"));
        echo "Uge ".date("W - Y", $first);

        echo "</b> <a href='pages.php?site=".$_GET['site']."&viewtype=Week&var=".($oVar+1)."'>>></a>";
Avatar billede jakobdo Ekspert
17. april 2007 - 20:58 #18
Hvorfor var det du skulle bruge ugenummer og ikke kunne bruge dag og måned?
Avatar billede haolan Nybegynder
17. april 2007 - 21:31 #19
Fordi jeg skal vise nogle events i ugevisning.. Som en slags kalender hvor man kan navigere gennem 1 uge af gangen
Avatar billede jakobdo Ekspert
17. april 2007 - 21:40 #20
Kunne det ikke være muligt at lave det med: næste uge = dag + 7 og forrige uge dag - 7 ?

Og som johan.o tidligere var indepå, kan ud så bruge month, day og year direkte i mktime().
Avatar billede nixir Nybegynder
17. april 2007 - 21:51 #21
Har lige skrevet et rigtig langt svar der gav det hele - men men men .. gode Gamle eksperten.dk loggede mig ud og automatisk ind - meeen glemte lige at tilføje det jeg havde skrevet. Du får en kort version uden så mange forklaringer:
_________________________________________________

Udgangspunkt: pages.php?year=2007&day=17&month=4
_________________________________________________

Tjek for rette format:

if (preg_match('/([\d]{4})/', $_GET['year'])&&preg_match('/([\d]{2})/', $_GET['day'])&&preg_match('/([\d]{2})/', $_GET['month']))
// DO YOU THING
else
// ERROR
_________________________________________________

$this_week = mktime(0, 0, 0, $_GET['month'], $_GET['day'], $_GET['year']);
echo "Denne uge er ".date("W", $this_week)." i år ".date("Y", $this_week);
_________________________________________________

$nxt_week = $this_week + (60*60*27*7);
$pre_week = $this_week - (60*60*27*7);
_________________________________________________

echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $pre_week)."&day=".date("j", $pre_week)."&month=".date("n", $pre_week)."'><<</a><b> ";

echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $nxt_week)."&day=".date("j", $nxt_week)."&month=".date("n", $nxt_week)."'><<</a><b> ";
_________________________________________________

Hvorfor <<< og >>> ? Er jeg gået glip af noget html?
Avatar billede haolan Nybegynder
17. april 2007 - 22:03 #22
nixir.. Når man trykker på næste uge kommer der ikke et 0 med i month, hvilket resultere  i at man ikke kan se noget pga. valideringen der forlanger to cifre..

Kan godt forstå hvor i vil hen, men er efterhånden ved at være mere lost i det her end da jeg startede :S
Avatar billede haolan Nybegynder
17. april 2007 - 22:05 #23
og igen.. Hvis jeg nu har to select bokse, hvor der i den ene er en række uge numre og i den anden en række ugenumre, så man derved kan springe til en bestemt uge. Hvordan skal jeg så beregne mig frem til den rigtige uge? :S
Avatar billede nixir Nybegynder
17. april 2007 - 22:05 #24
Sorry ... havde lige glemt det sku være 2 cifre ;)

echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $pre_week)."&day=".date("d", $pre_week)."&month=".date("m", $pre_week)."'><<</a><b> ";

echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $nxt_week)."&day=".date("d", $nxt_week)."&month=".date("m", $nxt_week)."'><<</a><b> ";

Sådan ... Det må du undskylde ... tanke-torsk ... Som sagt havde jeg lavet et længere svar, men det blev slettet - og så gider jeg ikke skrive det hele igen - du kan nok fornemme der var lidt mere guf på end det jeg sendte ;)
Avatar billede nixir Nybegynder
17. april 2007 - 22:06 #25
Avatar billede nixir Nybegynder
17. april 2007 - 22:07 #26
Du skal selvfølgelig tilrette det lidt til dit behov, men så vidt jeg husker kan du bruge nogle ting fra det ... sig hvis du skal have mere hjælp ...
Avatar billede johan.o Nybegynder
18. april 2007 - 01:21 #27
Om du vælger relative eller absolute værdier i din url er helt op til dig, begge dele kan fungere og begge dele har fordele og ulemper, er f.eks. links til bestemte perioder vigtige bør du vælge absolute værdier.

Jeg går ud fra at du mener at du har en select med uge numre og en select med årstal som så skal kunne frembringe den valgte uge i kalender form....

Jeg har 'brygget' det her...

<?php

$oUge=$_GET['uge']; $oAr=$_GET['year'];

$oDage=(($oUge-1)*7)+4;

$oDagNr=date("w", mktime(0, 0, 0, 1, $oDage, $oAr));
if($oDagNr==0) { $oDagNr=7; }

$oMandag=mktime(0, 0, 0, 1, ($oDage-($oDagNr-1)), $oAr);

echo "<pre>Dit link er : dinside.php?day=".date("j", $oMandag)."&month=".date("n", $oMandag)."&year=".date("Y", $oMandag)."</pre>";

?>

For test formål er det lavet sådan at 'den' henter uge nummer og årstal fra url'en så kan du sikkert selv indarbejde funktionaliteten i din kode.

Princippet er at den 4. januar er altid, uanset årstal med i uge 1. Det medfører at den valgte uges nummer ganget med 7 og så tillagt 4 er det antal dage der er fra den 1. januar til en dag der med sikkerhed er i den valgte uge....det natal findes i denne linje..

$oDage=(($oUge-1)*7)+4;

Vores mål er at finde datoen for mandagen i det valgte ugenummer.

Nu har vi fundet en dag vi ved der er i den valgte uge, men vi ved ikke hvad dag det er, derfor skal vi finde ud af dagens nummer, det gør vi i denne linje..

$oDagNr=date("w", mktime(0, 0, 0, 1, $oDage, $oAr));

..værd opmærksom på to ting. For det første '1' for januar og så ligger vi det tidligere fundne antal dage oveni og så finder mktime selv ud af det hvis måneden skifter. Dernæst brugen af "w", er ikke optimal da den returnere 0 hvis det er en søndag. Det er ikke optimalt da vi gerne vil have 7 for søndage, men da "w" er den eneste 'identifier' der er platform uafhængig har jeg valgt den. Hvis du kører PHP 5.1 eller højere kan du med fordel bruge "N" og så slette denne linje da den blot kompensere for 'søndags-problemet'..

if($oDagNr==0) { $oDagNr=7; }

..okay så så har vi et antal dage til en dag vi ved der i den uge vi vil vise, og vi ved hvilket nummer denne dag har, så ved at trække dagens nummer (-1) fra antallet af dage bør vi finde mandag i den uge vi vil vise..

$oMandag=mktime(0, 0, 0, 1, ($oDage-($oDagNr-1)), $oAr);

..og så er resten jo blot formatering..

Håber du kan bruge det til noget...

..og lige en ting omkring mktime/date osv. det er vigtigt at huske at skudår og sommer-/vinter-tid kan medfører 'problemer/unøjagtigheder' hvis man begynder at 'gå ud fra' at en dag er (60*60*24) sekunder.

Mvh. Johan
Avatar billede johan.o Nybegynder
18. april 2007 - 13:14 #28
Ja okay, stærkt Johan, så sprang jeg lige let og elegant hen over det du rent faktisk spurgte om...tsk tsk...sorry...

Dette her viser også forrige og næste uge nummer med tilhørende årstal -->

<?php

$oUge=$_GET['uge']; $oAr=$_GET['year'];

$oDage=(($oUge-1)*7)+4;

$oDagNr=date("w", mktime(0, 0, 0, 1, $oDage, $oAr));
if($oDagNr==0) { $oDagNr=7; }

$oMandag=mktime(0, 0, 0, 1, ($oDage-($oDagNr-1)), $oAr);

echo "<pre>Dit link er : dinside.php?day=".date("j", $oMandag)."&month=".date("n", $oMandag)."&year=".date("Y", $oMandag)."</pre>";

$oLastWeek=date("W Y", mktime(0, 0, 0, 1, ($oDage-($oDagNr-1))-7, $oAr));

$oNextWeek=date("W Y", mktime(0, 0, 0, 1, ($oDage-($oDagNr-1))+7, $oAr));

echo "<pre>Forrige uge er uge nr. ".$oLastWeek."</pre>";
echo "<pre>Næste uge er uge nr. ".$oNextWeek."</pre>";

?>

Mvh. Johan
Avatar billede johan.o Nybegynder
18. april 2007 - 13:16 #29
..og endnu kortere..

<?php

$oUge=$_GET['uge']; $oAr=$_GET['year'];

$oDage=(($oUge-1)*7)+4;

$oDagNr=date("w", mktime(0, 0, 0, 1, $oDage, $oAr));
if($oDagNr==0) { $oDagNr=7; }

$oMandag=mktime(0, 0, 0, 1, ($oDage-($oDagNr-1)), $oAr);

echo "<pre>Dit link er : dinside.php?day=".date("j", $oMandag)."&month=".date("n", $oMandag)."&year=".date("Y", $oMandag)."</pre>";

$oLastWeek=date("W Y", mktime(0, 0, 0, 1, $oDage-7, $oAr));

$oNextWeek=date("W Y", mktime(0, 0, 0, 1, $oDage+7, $oAr));

echo "<pre>Forrige uge er uge nr. ".$oLastWeek."</pre>";
echo "<pre>Næste uge er uge nr. ".$oNextWeek."</pre>";

?>

..burde vel egentlig også gøre det..

Mvh. Johan
Avatar billede johan.o Nybegynder
18. april 2007 - 13:17 #30
...arhh..og dog, der kommer måske lidt 'problemer' med årstallet så....den første skulle i hvertfald virke :)

Mvh. Johan
Avatar billede nixir Nybegynder
18. april 2007 - 15:01 #31
Det med den relative uge holder ikke i praksis - jeg er ked af at sige det. Hvis vi ser det ud fra et perfomance mæssigt synspunkt er den absolute date difination klart den bedste løsning.

Den vil aldrig kunne returnerer en forkert uge hvilket jeg synes er en lille fordel ;)

URL's kan benyttes uanset dato ... Sidder man på sitet fra kl 23.59 til kl 00.01, ja så vil man kunne opleve at scriptet går i kage. Noget registreres et forkert sted eller lign. Noget man for alt i verden ikke engang må lade være en teoretisk mulighed.

Her er noget nær den optimale kode til løsning af dit problem:

if (preg_match('/([\d]{4})/', $_GET['year'])&&preg_match('/([\d]{2})/', $_GET['day'])&&preg_match('/([\d]{2})/', $_GET['month'])) {

    $this_week = mktime(0, 0, 0, $_GET['month'], $_GET['day'], $_GET['year']);
    $nxt_week = $this_week + (60*60*27*7);
    $pre_week = $this_week - (60*60*27*7);

    echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $pre_week)."&day=".date("d", $pre_week)."&month=".date("m", $pre_week)."'>&lt;&lt;</a><b> ";

    echo "Uge ".date("W - Y", $this_week);

    echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $nxt_week)."&day=".date("d", $nxt_week)."&month=".date("m", $nxt_week)."'>&gt;&gt;</a><b> ";

} else {
    echo "Der skete en fejl. Den angivne dato er af forkert format (skal være xx/xx-xxxx)";
}

Mht at udskrive alle uger i et givent år gøre det sådan her:

$year = 2007 // 1999, 2000, 2010 etc.
$date = mktime(0, 0, 0, 0, 0, $year);
$nxt_ year = mktime(0, 0, 0, 0, 0, $year+1);

echo "<input type='hidden' name='year' value='".$year."' />\n";
echo "<select name='date'>\n";

while ($pre_week < $this_week) {
    echo "<option value='".date('m-d',$date)."'>".date('W',$date)."</option>\n"; // Udskriver ugenr. et givent år - har en tilfældig dag på ugen som "date value"
    $date += (7 * 24 * 60 * 60);
    $pre_week = $this_week;
    $this_week = date("W", $date);
}

echo "</select>\n";

På den side hvor du submitter formen til, vil du så have:

$_POST['year'] // 2007
$_POST['date'] // 20-01

Vi laver dem om til 3 variabler der er nemmere at bruge:

list($month, $day) = split('-', $_POST['date']); // Definerer $month og $day
$year = $_POST['year'];

Så kan vi evt. finde timestamp igen af den nye dato, så vi kan arbejde videre:

$date = mktime(0, 0, 0, $month, $day, $year);


For at samle op til sidst har vi 3 filer:

_____________________________________________________

pages.php:

if (preg_match('/([\d]{4})/', $_GET['year'])&&preg_match('/([\d]{2})/', $_GET['day'])&&preg_match('/([\d]{2})/', $_GET['month'])) {

    $this_week = mktime(0, 0, 0, $_GET['month'], $_GET['day'], $_GET['year']);
    $nxt_week = $this_week + (60*60*27*7);
    $pre_week = $this_week - (60*60*27*7);

    echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $pre_week)."&day=".date("d", $pre_week)."&month=".date("m", $pre_week)."'>&lt;&lt;</a><b> ";

    echo "Uge ".date("W - Y", $this_week);

    echo "<a href='pages.php?site=".$_GET['site']."&viewtype=Week&year=".date("Y", $nxt_week)."&day=".date("d", $nxt_week)."&month=".date("m", $nxt_week)."'>&gt;&gt;</a><b> ";

} else {
    echo "Der skete en fejl. Den angivne dato er af forkert format (skal være xx/xx-xxxx)";
}

_____________________________________________________

form.php:

$year = 2007 // 1999, 2000, 2010 etc.
$date = mktime(0, 0, 0, 0, 0, $year);
$nxt_ year = mktime(0, 0, 0, 0, 0, $year+1);

echo "<input type='hidden' name='year' value='".$year."' />\n";
echo "<select name='date'>\n";

while ($pre_week < $this_week) {
    echo "<option value='".date('m-d',$date)."'>".date('W',$date)."</option>\n"; // Udskriver ugenr. et givent år - har en tilfældig dag på ugen som "date value"
    $date += (7 * 24 * 60 * 60);
    $pre_week = $this_week;
    $this_week = date("W", $date);
}

echo "</select>\n";

_____________________________________________________

submit.php:

list($month, $day) = split('-', $_POST['date']); // Definerer $month og $day
$year = $_POST['year'];

$date = mktime(0, 0, 0, $month, $day, $year);
Avatar billede nixir Nybegynder
18. april 2007 - 15:15 #32
$nxt_ year bliver defineret i form.php, men bruges ikke da jeg lavede om i forhold til min første måde at lave det på ... udover det så vil den linie også fejle fordi "$nxt_ year" ikke er en gyldig variabel.

en anden lille ting ... Jeg tror måske du er nødt til at smide:
$pre_week = 0;
$this_week = date('W',$date);
... foran while(...) {
Avatar billede nixir Nybegynder
18. april 2007 - 15:17 #33
form.php

$year = 2007 // 1999, 2000, 2010 etc.
$date = mktime(0, 0, 0, 0, 0, $year);
$pre_week = 0;
$this_week = date('W',$date);

echo "<input type='hidden' name='year' value='".$year."' />\n";
echo "<select name='date'>\n";

while ($pre_week < $this_week) {
    echo "<option value='".date('m-d',$date)."'>".date('W',$date)."</option>\n"; // Udskriver ugenr. et givent år - har en tilfældig dag på ugen som "date value"
    $date += (7 * 24 * 60 * 60);
    $pre_week = $this_week;
    $this_week = date("W", $date);
}

echo "</select>\n";



.... Undskylde mine mange kommentarer - ville ønske jeg kendte en måde til at rette mine indlæg.
Avatar billede johan.o Nybegynder
18. april 2007 - 16:05 #34
Øhh..relative uge, hvad mener du ?

Mvh. Johan
Avatar billede johan.o Nybegynder
18. april 2007 - 16:57 #35
Måske det her kan hjælpe...haolan

<?php

$year = 2007;
$day=4;
$pre_week = 0;

echo "<form action='' method='post'>\n<select name='uge'>\n";

while ($pre_week < date("W", mktime(0, 0, 0, 1, $day, $year))) {
$pre_week = date("W", mktime(0, 0, 0, 1, $day, $year));
$day_no=date("w", mktime(0, 0, 0, 1, $day, $year));
if($day_no==0) { $day_no=7; }
echo "<option value='".date("Y-m-d-W", mktime(0, 0, 0, 1, ($day-($day_no-1)), $year))."'>".$pre_week."</option>\n";
$day+=7;
}

echo "</select>\n<input type='submit' value='Send'>\n</form>\n";

if(isset($_POST['uge'])) {
list($year, $month, $day, $week) = split('-', $_POST['uge']);

echo "<pre>Week number ".$week." contains the following days...</pre>";

for($i=0; $i<7; $i++) {
  echo "<pre>".date("l j. F Y", mktime(0, 0, 0, $month, $day+$i, $year))."</pre>"; }

echo "<pre>Og hvis du skal søge efter informationer i din database der passer i den viste uge kan du bruge følgende timestamps...</pre>";

echo "<pre>Start : ".mktime(0, 0, 0, $month, $day, $year)." som er ".date("l j. F Y H:i:s", mktime(0, 0, 0, $month, $day, $year))."</pre>";
echo "<pre>Slut : ".mktime(23, 59, 59, $month, $day+($i-1), $year)." som er ".date("l j. F Y H:i:s", mktime(23, 59, 59, $month, $day+($i-1), $year))."</pre>";
}

?>

Mvh. Johan
Avatar billede haolan Nybegynder
19. april 2007 - 22:07 #36
Det er sådan noget som Johans seneste indlæg at jeg søger, dog blandet sammen med det første i lavede med frem og tilbageknapper.

Altså man kommer ind på pages.php?viewtype=Week&year=2007&week=16

Man ser altså fra start af den uge man er i lige nu.

Man skal kunne navigere frem og tilbage i ugerne, ligesom de frem og tilbageknapper vi lavede tidligere. Og samtidig skal der oppe i det ene hjørne være et par selection-bokse  den ene med ugenr og den anden med årstal, og så en "go" knap, så man altså kan navigere hurtigt til en uge der ligger nogle år tilbage eller fremme.
Avatar billede nixir Nybegynder
19. april 2007 - 22:26 #37
Det med at bruge en relativ værdi er som tidligere nævnt usikkert, og set ud fra et performance-synspunkt lidt mere krævende da man ikke blot kan lave et timestamp og trække en uge fra eller lægge en uge til - og så selvfå den til at finde ud af året etc... Det komplicerer noget unødigt.

Men det er klart du skal bruge det du bedst selv kan lide, da du sikkert vil klumre rundt i det andet (hvis du ikke helt forstår det).

Mvh.
Avatar billede johan.o Nybegynder
19. april 2007 - 22:32 #38
--> nixir...der er vist ikke nogen der bruger relative værdier i denne tråd mere da haolan jo har gjort det klart at det ville 'han' gerne være fri for.

Mvh. Johan
Avatar billede haolan Nybegynder
19. april 2007 - 23:02 #39
Jeg forsøger om jeg kan få fikset noget af det sammen i indtil videre har lavet og så vender jeg tilbage med min endelige løsning, samt pointudeling :)

Takker indtil videre..

:-Hoalan
Avatar billede haolan Nybegynder
19. april 2007 - 23:17 #40
Johan >> Nu udskriver jeg ikke en hel uge ligesom du gør i dit eksempel, hvilket jo betyder at jeg får et problem med $i  i sætningen: mktime(23, 59, 59, $month, $day+($i-1), $year).

Hvad skal jeg smide ind i stedet for $i her, for alligevel at komme til slutningen af ugen, som du gør?
Avatar billede johan.o Nybegynder
19. april 2007 - 23:53 #41
Måske du bedre kan bruge det her...jeg så godt dit spørgsmål, men jeg sad lige og arbejdede med det :)..

<?php

$sYear="<select name='year'>";
for($i=1990; $i<2021; $i++) {
$sYear.="<option value='".$i."'>".$i."</option>"; }
$sYear.="</select>";

$sWeek="<select name='week'>";
for($i=1; $i<54; $i++) {
$sWeek.="<option value='".$i."'>".$i."</option>"; }
$sWeek.="</select>";

$day=4;
$pre_week = 0;

$oOutput="<html><body><form action='' method='get'><input type='hidden' name='viewtype' value='week'><table style='border: 1px solid #AAA898;'><tr><td>År :</td><td>".$sYear."</td><td>Uge :</td><td>".$sWeek."</td></tr><tr><td colspan='4' style='text-align: center;'><input type='submit' value='Send'></td></tr></table></form>";

$viewtype="week";
$year=date("Y");
$week=date("W");

if(isset($_GET['viewtype']) && isset($_GET['year']) && isset($_GET['week'])) {
$viewtype=$_GET['viewtype'];
$year=$_GET['year'];
$week=$_GET['week']; }

$oDayNo=date("w", mktime(0, 0, 0, 1, (($week-1)*7)+4, $year));
if($oDayNo==0) { $oDayNo=7; }
$oDays=((($week-1)*7)+4)-($oDayNo-1);

$oOutput.="<pre>Week number ".$week." contains the following days...</pre>";

for($i=0; $i<7; $i++) {
  $oOutput.="<pre>".date("l j. F Y", mktime(0, 0, 0, 1, $oDays+$i, $year))."</pre>"; }

$next="?viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays+7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays+7, $year));
$last="?viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays-7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays-7, $year));

$oOutput.="<a href='".$_SERVER['php_self'].$next."'>Next week</a><br>";
$oOutput.="<a href='".$_SERVER['php_self'].$last."'>Last week</a>";

$oOutput.="<pre>Og hvis du skal søge efter informationer i din database der passer i den viste uge kan du bruge følgende timestamps...</pre>";

$oOutput.="<pre>Start : ".mktime(0, 0, 0, 1, $oDays, $year)." som er ".date("l j. F Y H:i:s", mktime(0, 0, 0, 1, $oDays, $year))."</pre>";
$oOutput.="<pre>Slut : ".mktime(23, 59, 59, 1, $oDays+6, $year)." som er ".date("l j. F Y H:i:s", mktime(23, 59, 59, 1, $oDays+6, $year))."</pre>";

echo $oOutput;

?>

Mvh. Johan
Avatar billede johan.o Nybegynder
19. april 2007 - 23:57 #42
Drop down boksene har jo en lille svaghed da de ikke er dynamiske..eller relative om man vil :)...der er lavet 53 uger, men det er jo ikke alle år der har 53 uger. Men vælger uge 53 i et år med 52 uger viser den blot uge 1 det næste uge, selv om den kalder den uge 53....

Der kan du sikkert fylde et eller andet check på hvis du ikke kan acceptere det.

Mvh. Johan
Avatar billede johan.o Nybegynder
19. april 2007 - 23:59 #43
Arh, det var da fuld af fejl...

Drop down boksene har jo en lille svaghed da de ikke er dynamiske..eller relative om man vil :)...der er lavet 53 uger, men det er jo ikke alle år der har 53 uger. Men vælger man uge 53 i et år med 52 uger viser den blot uge 1 i næste år, selv om den kalder den uge 53....

Der kan du sikkert fylde et eller andet check på hvis du ikke kan acceptere det.

Mvh. Johan

...sådan der..
Avatar billede nixir Nybegynder
20. april 2007 - 00:08 #44
johan.o ... Det du har et lille problem med ville du ikke have noget problem med hvis du benyttede dato (jeg stopper med at kalde det relativ :D)

Men hvis du ønsker 2 at rette "fejlen" kan du selvfølgelig godt det - ganske "simpelt". Du loader en ny dropdown-menu for "uger" hver gang der vælges et nyt årstal - det gøres vha. javascript.

Der var en tråd om det herinde for nyligt.
Avatar billede johan.o Nybegynder
20. april 2007 - 10:13 #45
...nixir...hvad mener du med "Det du har et lille problem med ville du ikke have noget problem med hvis du benyttede dato" ?...de variabler der er i URL'en er de variabler haolan ville have...det kan ganske rigtigt gøres anderledes, men jeg har svært ved at se relevansen :)

...det kan ganske rigtigt laves med javascript...et alternativ kunne måske være...

<?php

$sYear="<select name='year'>";
for($i=1990; $i<2021; $i++) {
$sYear.="<option value='".$i."'>".$i."</option>"; }
$sYear.="</select>";

$sWeek="<select name='week'>";
for($i=1; $i<54; $i++) {
$sWeek.="<option value='".$i."'>".$i."</option>"; }
$sWeek.="</select>";

$day=4;
$pre_week = 0;

$oOutput="<html><body><form action='' method='get'><input type='hidden' name='viewtype' value='week'><table style='border: 1px solid #AAA898;'><tr><td>År :</td><td>".$sYear."</td><td>Uge :</td><td>".$sWeek."</td></tr><tr><td colspan='4' style='text-align: center;'><input type='submit' value='Send'></td></tr></table></form>";

$viewtype="week";
$year=date("Y");
$week=date("W");

if(isset($_GET['viewtype']) && isset($_GET['year']) && isset($_GET['week'])) {
$viewtype=$_GET['viewtype'];
$year=$_GET['year'];
$week=$_GET['week']; }

$oDayNo=date("w", mktime(0, 0, 0, 1, (($week-1)*7)+4, $year));
if($oDayNo==0) { $oDayNo=7; }
$oDays=((($week-1)*7)+4)-($oDayNo-1);

if($week!=date("W", mktime(0, 0, 0, 1, $oDays, $year))) {
$oOutput.="<pre>The week doesn't exist in the choosen year. Instead week number 1 the following year is presented.</pre>";
$year=date("Y", mktime(0, 0, 0, 1, $oDays, $year));
$week=date("W", mktime(0, 0, 0, 1, $oDays, $year)); }

$oOutput.="<pre>Week number ".$week." in the year ".$year." contains the following days...</pre>";

for($i=0; $i<7; $i++) {
  $oOutput.="<pre>".date("l j. F Y", mktime(0, 0, 0, 1, $oDays+$i, $year))."</pre>"; }

$next="?viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays+7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays+7, $year));
$last="?viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays-7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays-7, $year));

$oOutput.="<a href='".$_SERVER['php_self'].$next."'>Next week</a><br>";
$oOutput.="<a href='".$_SERVER['php_self'].$last."'>Last week</a>";

$oOutput.="<pre>Og hvis du skal søge efter informationer i din database der passer i den viste uge kan du bruge følgende timestamps...</pre>";

$oOutput.="<pre>Start : ".mktime(0, 0, 0, 1, $oDays, $year)." som er ".date("l j. F Y H:i:s", mktime(0, 0, 0, 1, $oDays, $year))."</pre>";
$oOutput.="<pre>Slut : ".mktime(23, 59, 59, 1, $oDays+6, $year)." som er ".date("l j. F Y H:i:s", mktime(23, 59, 59, 1, $oDays+6, $year))."</pre>";

echo $oOutput;

?>

Mvh. Johan

Mvh. Johan
Avatar billede nixir Nybegynder
20. april 2007 - 12:32 #46
Jaja, kan godt se din pointe med at det vil virke - men hvor prof ser det ud at man kan vælge en uge der ikke eksiterer?

Du har fundet et løsningsforslag, jeg pointerer blot at du kan lave det med javascript så den ikke giver en forkert uge som valgmulighed fra starten af...

Men det er da rigtigt dit vil virke...

Nu spørger jeg fordi jeg er uviden. definerer man uge 1 efter at 4 dage af ugen minimum skal være i det nye år?
(  mktime(0, 0, 0, 1, (($week-1)*7)+4, $year));  )
Avatar billede johan.o Nybegynder
20. april 2007 - 13:36 #47
Ja, det år hvor størstedelen af ugen ligger er det år hvor ugen tæller.

Du kan se mere her : http://jeppesn.dk/uge.html

..og jeg er ganske klar over problematikken i drop down boksene, det er denne del af dit indlæg jeg ikke kan forstå hvad du mener med...

"Det du har et lille problem med ville du ikke have noget problem med hvis du benyttede dato"..?

Mvh. Johan
Avatar billede haolan Nybegynder
20. april 2007 - 14:03 #48
Regner med at fikse noget javascript sammen når jeg kommer til de sidste småjusteringer af siden :)

Takker for dit svar Johan O.. Jeg fik nu min ugevisning til at virke perfekt :)
Så mangler jeg bare måneds og årsvisningen, som dog burde være lidt nemmere at få fikset sammen :)

Lægger du et svar?
Avatar billede johan.o Nybegynder
20. april 2007 - 17:20 #49
Det gør jeg da :)

Mvh. Johan
Avatar billede haolan Nybegynder
20. april 2007 - 17:27 #50
Hmm lige et lille problem jeg lige har opdaget med denne her..

Mine mandage blive ignoreret.. :S

De events jeg som ligger på en mandag bliver ignoreret..
Kan det have noget at gøre med at de ikke har et bestemt klokkeslet? Når jeg opretter dem har de kun en dato.
Avatar billede nixir Nybegynder
20. april 2007 - 17:28 #51
Det var fordi jeg ikke var klar over hvordan første uge i året er defineret. Men kan godt se din kode overholder ISO...

Men jeg vil stadig våge at påstå, at en mere simpel og huritg kode kunen anvendes med endato, da man sparer udregninger og kan gå stort set direkte til tjek for antal uger.

Men begge dele virker. Jeg er bare tilhænger af at holde koden så lille som mulig - og hurtig!

Men det er nok bare nemmere at overskue med week=xx end en dato i url, det kan jeg også godt se...

Så må man bare vælge side, og haolan havde en klar holdning til at det skulle være efter week=xx, og derfor er det som jeg tidligere nævnte også den løsning han skal vælge. Ellers går han kold i koden første gang han skal ændre noget (hvis det andet ikke er til at gennemskue).

Mvh.
Avatar billede johan.o Nybegynder
20. april 2007 - 17:43 #52
Så bliver du nød til at vise den kode du bruger...

Mvh. Johan
Avatar billede haolan Nybegynder
29. april 2007 - 22:05 #53
Koden jeg har ser sådan ud:

if($_GET['viewtype'] == "Week") {
    $day=4;
    $pre_week = 0;

    $viewtype="week";
    $year=date("Y");
    $week=date("W");
    if(isset($_GET['viewtype']) && isset($_GET['year']) && isset($_GET['week'])) {
        $viewtype=$_GET['viewtype'];
        $year=$_GET['year'];
        $week=$_GET['week'];
    }
    $oDayNo=date("w", mktime(0, 0, 0, 1, (($week-1)*7)+4, $year));
    if($oDayNo==0) {
        $oDayNo=7;
    }
    $oDays=((($week-1)*7)+4)-($oDayNo-1);

    //LINKS (FREM OG TILBAGE)
    $next="?site=".$_GET['site']."&viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays+7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays+7, $year));
    $last="?site=".$_GET['site']."&viewtype=".$viewtype."&year=".date("Y", mktime(0, 0, 0, 1, $oDays-7, $year))."&week=".date("W", mktime(0, 0, 0, 1, $oDays-7, $year));

    echo "<a href='".$_SERVER['php_self'].$last."'><<</a> <b>Uge ";
    echo $_GET['week']." ".$_GET['year'];
    echo "</b> <a href='".$_SERVER['php_self'].$next."'>>></a>";

}

Beklager ventetiden.. har haft lidt småtravlt på det sidste...
Avatar billede haolan Nybegynder
29. april 2007 - 22:06 #54
og her er koden der udskriver:

if($_GET['viewtype'] == "Week") {
    $ugeStart = mktime(0, 0, 0, 1, $oDays, $year);
    $ugeSlut = mktime(23, 59, 59, 1, $oDays+6, $year);
   
    $get_pas = mysql_query("SELECT * FROM s_pas WHERE dato > $ugeStart AND dato < $ugeSlut order by dato ASC");
    while($p = mysql_fetch_array($get_pas)) {
   
        $dato = date("d/m", $p['dato']);
        $dag = date("w", $p['dato']);
        $dag = $weekDay[$dag];
       
        $get_type = mysql_query("SELECT type FROM s_typer WHERE id = '".$p['typeid']."'");
        $type = mysql_fetch_array($get_type);
       
        if($p['tid'] == 0) {
            $tid = "-";
        } else {
            $tid = date("H:i:s", $p['tid']);
        }
        echo "<tr><td style='border-bottom:1px solid #000; height: 30px;'>$dag $dato</td><td style='border-bottom:1px solid #000; height: 30px;'>".$type['type']."</td><td style='border-bottom:1px solid #000; height: 30px;'>".$p['distance']." km</td><td style='border-bottom:1px solid #000; height: 30px;'>$tid</td><td style='border-bottom:1px solid #000; height: 30px;'>".$p['min_puls']."</td><td style='border-bottom:1px solid #000; height: 30px;'>".$p['max_puls']."</td></tr>";
    }
}
Avatar billede johan.o Nybegynder
29. april 2007 - 22:31 #55
Er lige på vej i seng så jeg har ikke kigget ordentligt på det, men mon ikke det er denne linje...

  $get_pas = mysql_query("SELECT * FROM s_pas WHERE dato > $ugeStart AND dato < $ugeSlut order by dato ASC");

..der skal se sådan her ud..

  $get_pas = mysql_query("SELECT * FROM s_pas WHERE dato >= $ugeStart AND dato =< $ugeSlut order by dato ASC");

..det er muligt du skal bytte rundt på >= så det bliver => det kan jeg ikke lige huske...

Mvh. Johan
Avatar billede haolan Nybegynder
30. april 2007 - 20:33 #56
Burde jeg have vidst :)

takker for hjælpen :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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