[php] archief voor weblog

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik heb het volgende probleem. Als mensen een weblog aanmaken op mijn site, wordt de datum geregistreerd. Zeg eens $toegevoegd.

Nu wil ik dat er in het rechtermenu de datum (Maand Jaar) wordt getoond. Vanaf de datum dat de wbelog is aangemaakt tot op heden.

Zelf had ik het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
setlocale (LC_ALL,"nl_NL");
$months = "";
$datenow = date("Y-m-d");
$start = $toegevoegd;
while (strtotime($start) <= strtotime($datenow)) {
    $months = "<li><a href=\"/archief/".strftime("%Y-%m", strtotime("$start"))."/\">".ucfirst(strftime("%B %Y", strtotime("$start")))."</a></li>".$months;
    $start = date("Y-m-d", strtotime("$start + 1 months"));    
}
if (substr($start,0,7) == substr($datenow,0,7)) {
    $months = "<li><a href=\"/archief/".strftime("%Y-%m", strtotime("$start"))."/\">".ucfirst(strftime("%B %Y", strtotime("$start")))."</a></li>".$months;
}


Dit werkt wel, maar is niet echt ideaal, met name de laatste if lus. Het zou mooier zijn als deze weg kan. Heeft iemand misschien een beter idee om dit op te lossen?

En hoe zit het als ik in plaats van de maanden de weken wil maken.

Dus bijv:
Week 3 2005
Week 2 2005
etc..

Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 20:25
Ik heb iets soortgelijks gedaan via een SQL query.
code:
1
2
3
4
5
6
SELECT
    DATE_FORMAT(FROM_UNIXTIME(datum) ,'%Y') AS jaar,
    DATE_FORMAT(FROM_UNIXTIME(datum) ,'%m') AS maand,
    COUNT(ID) AS aantal_blogs
FROM blogs
GROUP BY jaar, maand

Zoals je ziet loopt deze query de tabel met blogs (artikelen) af, en geeft vervolgens het jaar, de maand en het aantal blogs in die maand terug. In de database staat de datum opgeslagen als UNIX timestamp, vandaar het gebruik van FROM_UNIXTIME().
De resultset ziet er als volgt uit:
code:
1
2
3
4
5
6
7
Resultaat van deze query:
jaar    maand    aantal_blogs
-----------------------------
2004    06       80
2004    07       17
2005    01       1337
-----------------------------

Dit is dus per maand, maar als je de query een beetje aanpast kan je het ook prima per week laten ophalen.

Vervolgens moet je dit natuurlijk nog outputten, of in een array stoppen, afhankelijk van wat je ermee gaat doen. In mijn geval gaat het een array in die naar de template parser gaat.

[ Voor 3% gewijzigd door Metalman op 01-12-2005 20:54 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Je zou date-arrays kunnen vergelijken (getDate()) of in het geval van PHP5 idate() resultaten kunnen vergelijken.
offtopic:
Een hoop overbodige strToTime calls heb je daar trouwens, en wat is er mis met een for-loop, zeker in dit geval?

Acties:
  • 0 Henk 'm!

Verwijderd

De oplossing via een SQL-query is voor mij niet zo handig. Dat kost me namelijk weer een extra query. Ik zou graag gewoon met php een lijstje willen maken die de maanden van een begindatum tot nu maakt. Op zich werkt het script wta ik nu gebruik wel, alleen vind ik het niet optimaal.

getDate is alleen een functie om iets om te zetten toch?

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik zit echt met dit probleem. En kan het zelf niet anders krijgen. Een reactie als een for loop gebruiken, tja ik zou niet weten hoe ik hier nu een for loop mee kan maken. Heb het wel geprobeerd, maar is volgens mij echt omslachtiger.

Daarnaast heb ik bovenstaande code nu ook zo gemaakt dat hij de weken afdrukt. Maar goed, nu zit ik met het probleem, hoe kreeg ik de gegevens van die week uit de database.

Stel ik heb 2 waarden in mijn php script voorhanden. Zowel het weeknummer als het jaar. Hoe krijg ik dan de artikelen uit mijn mysql database voor die data. In mijn database staat de datum opgeslagen als bijv: "2005-11-05 12:03:45"

Het week gebeuren heb ik inmiddels al volgens mij, gewoon week() gebruiken... maar hoe kan ik in php op een mooiere manier een lijstje genereren?

Oh jah en de posts van Robbie82 ben ik ook toevallig. Hij had zich evrgeten uit te loggen op mijn pc en ik opnieuw in t eloggen op mijn pc

[ Voor 20% gewijzigd door RSD op 03-12-2005 13:22 ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Niemand die het weet? Kan het me haast niet voorstellen... dat week gebeuren is ook niet wat. Je hebt 6 modes, welke zou nu het meest geschikt zijn. Eentje die op maandag begint maar die keuze daaruit??

Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 22:34

TheDane

1.618

Volgens mij kun je met de date() functie toch echt alles doen wat je wil..

En waarom sla je geen (unix) timestamps op?

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Als ik mijn scriptje test, dan doet hij het wel, alleen die while lus en dan erna die if lus zijn niet zo lekker...

Ik vroeg me af of dat beter kon en zo ja hoe... dus in een for loop en eventueel met veel minder strtotime etc dingen.

Ik sla de tijd niet op als microtime. Dat heb ik in het verleden wel gedaan, maar altijd problemen om het dan weer om te zetten.

Het moet dus ook niet vanuit een database, maar voor een gegevend begine en eindatum en dan een lijstje maken met de maanden/weken in die tussen tijd inc de begin en einddatum.


Daarnaast zoek ik nog steeds een goede manier om de weken uit de database te halen.

Nu kan ik week($datum,3)=$weeknr gebruiken, maar als ik dan een jaar verder ben, pakt hij ook de weken van dat jaar, maar dan zou ik ook nog AND year($datum)=2005 ofzo moeten toevoegen...

[ Voor 13% gewijzigd door RSD op 05-12-2005 13:49 ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Verwijderd schreef op vrijdag 02 december 2005 @ 10:06:
De oplossing via een SQL-query is voor mij niet zo handig. Dat kost me namelijk weer een extra query. Ik zou graag gewoon met php een lijstje willen maken die de maanden van een begindatum tot nu maakt. Op zich werkt het script wta ik nu gebruik wel, alleen vind ik het niet optimaal.

getDate is alleen een functie om iets om te zetten toch?
Wat is er mis met een extra query? Dingen uitrekenen met PHP is vaak 'duurder' qua processortijd. Zeker met al dat stringvergelijken.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Jah maar ik heb geen query nodig. Ik heb alleen een begin datum dus de datum dat de log is toegevoegd en dan wil ik vanaf die datum tot heden een lijstje maken. Als er een maand niks is toegevoegd, moet die maand wel in het lijstje staan en met een query gebeurt dat niet.

PHP:
1
2
3
4
5
6
7
8
$begin = "2005-04-11"; //bijvoorbeeld
$eind = date("Y-m-d");
$list = "";

for (******) {
  $list .= date("m Y",*******)."<br>";
}
echo $list;


Wie maakt het af? Het klukt mezelf wel, maar dan heb ik weer een godsvermogen aan strtotime etc etc... ik zoek een snellere routine

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
RSD schreef op maandag 05 december 2005 @ 14:33:
Wie maakt het af? Het klukt mezelf wel, maar dan heb ik weer een godsvermogen aan strtotime etc etc... ik zoek een snellere routine
Met strftime("%W",timestamp) heb je je weeknummer te pakken... mijn implementatie zou zoiets zijn:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    // Sla begin en einddatum op...
    $begin = strtotime("2005-04-11"); //bijvoorbeeld
    $eind = time();
    
    $list = "";
    $nu = $begin;
    
    // Loop van het begin totaan vandaag door de weken heen en voeg de week toe aan de lijst...
    while (($dezeWeek = strftime("%W",$nu)) <= strftime("%W",$eind)) {
        $list .= "Week $dezeWeek ".date("Y",$nu)."\n";
        $nu += 7*24*60*60;
    }
    
    // Print de lijst \o/
    echo $list;
?>


edit:
Iets mooiere implementatie die de huidige week ook meeneemt...:)

[ Voor 14% gewijzigd door Huppie op 05-12-2005 15:01 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Superbedankt, maar als ik deze wil ombouwen voor de maanden, dan zit ik met $nu += 24*7*60*60; want het aantal dagen van een maand is variabel... O-)

Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
en uit te lezen met date(t) :)

Icons are overrated


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hoe bedoel je dat?

Acties:
  • 0 Henk 'm!

Verwijderd

precies zoals hij 't zegt

www.php.net/date

t Number of days in the given month 28 through 31

$aantaldagen = date(t,$timestamp)

Acties:
  • 0 Henk 'm!

Verwijderd

En wat dacht je dan van zomer/wintertijd icm date(t)? Dat gaat niet werken :)
PHP:
1
$nieuwestamp = strtotime("+1 week",$oudestamp);


[edit]
/me moet beter leren lezen. :)

Dit heeft niets te maken met de date(t). Die kan hij nl wel gebruiken. Maar de manier dat hij een week er bij optelt is iig WEL buggy zo ;)

[ Voor 43% gewijzigd door Verwijderd op 06-12-2005 00:48 ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hmm als ik hem alsvolgt heb:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?

// zet plaats
setlocale (LC_ALL,"nl_NL");

// Sla begin en einddatum op... 
$begin = strtotime("2004-04-11"); //bijvoorbeeld 
$eind = time(); 
 
$list = ""; 
$nu = $begin; 
 
// Loop van het begin totaan vandaag door de weken heen en voeg de week toe aan de lijst... 
while (($dezeWeek = strftime("%W",$nu)) <= strftime("%W",$eind)) { 
    $list .= "Week $dezeWeek ".date("Y",$nu)."<br>"; 
    $nu = strtotime("+1 week",$nu); 
} 
 
// Print de lijst \o/ 
echo $list; 

?>


En ik begin bijvoorbeeld in 2004 dan werkt hij niet goed, de jaren worden niet meegerekend.

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
RSD schreef op dinsdag 06 december 2005 @ 14:48:
En ik begin bijvoorbeeld in 2004 dan werkt hij niet goed, de jaren worden niet meegerekend.
Nu je het zegt... Met een beetje creativiteit zo opgelost ;)

edit:
Voor de duidelijkheid...hij vergeleek in de hierboven geposte oplossing dus alleen de weeknummer, nu vergelijkt ie <jaar><weeknummer>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?

// zet plaats
setlocale (LC_ALL,"nl_NL");

// Sla begin en einddatum op... 
$begin = strtotime("2004-04-11"); //bijvoorbeeld 
$eind = time(); 
 
$list = ""; 
$nu = $begin; 
 
// Loop van het begin totaan vandaag door de weken heen en voeg de week toe aan de lijst... 
while (strftime("%Y%W",$nu) <= strftime("%Y%W",$eind)) { 
    $dezeWeek = strftime("%W",$nu);
    $list .= "Week $dezeWeek ".date("Y",$nu)."<br>"; 
    $nu = strtotime("+1 week",$nu); 
} 
 
// Print de lijst \o/ 
echo $list; 

?>

[ Voor 17% gewijzigd door Huppie op 06-12-2005 15:19 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik had zelf al een omslachtige manier bedacht, maar deze is beter idd... thanks!

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$begin = strtotime("2005-04-11"); //bijvoorbeeld  
$eind = time();  
  
$list = "";  
$nu = $begin;  
  
while (strftime("%Y%m",$nu) <= strftime("%Y%m",$eind)) {  
    $dezeMaand = strftime("%m",$nu); 
    $list = "$dezeMaand ".date("Y",$nu)."<br>".$list;  
    $nu = strtotime("+1 months",$nu);  
}  
  
echo $list;


Hier nog even de functie voor de maand voor de liefhebber!

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Alleen jammer dat %W op 1 januari 00 geeft. Zijn daar nog oplossingen voor?

Moet ik dan %V en %G gebruiken ofzo?

[ Voor 22% gewijzigd door RSD op 06-12-2005 15:49 ]

Pagina: 1