login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Datum of dagen in de week (Opgelost)

Offline HannaH - 14/08/2011 18:02
Avatar van HannaHMySQL interesse hallo,

Ik heb een probje en me al blauw gegoogeld.
ik heb een datum $datum = '14/08/2011'
dit is dag 0 (format als 'w')
en dit is week 32 (format als 'W')

ik zou graag de de dagen 1 tot en met 5 (maandag tot vrijdag)
in een database stoppen

maar hoe krijg ik deze array?

10 antwoorden

Gesponsorde links
Offline Stijn - 14/08/2011 18:20
Avatar van Stijn PHP expert Gewoon een if statement die checkt of de dag tussen 1 en 5 ligt en die dan ergens opslaan of toevoegen aan een array.
Offline vinTage - 14/08/2011 18:22 (laatste wijziging 14/08/2011 18:24)
Avatar van vinTage Nieuw lid Kijk eens wat ik een tijdje geleden maakte, volgens mij wil je zoiets ? 

en een vb
Offline HannaH - 14/08/2011 18:47
Avatar van HannaH MySQL interesse misschien nog even duidelijker..
heb datum woensdag bvb 2011/08/17het is week 33 - dag 3
en ik zou in mijn database willen
maandag 2011/08/15
dinsdag 2011/08/16
... enz tot aan
vrijdag 2011/08/16
Offline vinTage - 14/08/2011 18:58 (laatste wijziging 14/08/2011 19:00)
Avatar van vinTage Nieuw lid Mijn vb maakt toch de datums zelf aan, zodra je op de 'index' komt, wordt gewoon de hele week verder automatisch aangemaakt.

of je bedoeld dat je echt de (foute) string 2011/08/17 hebt, en er woensdag bij wilt hebben?

  1. <?php
  2. $datum = "2011/08/17";
  3. echo date("l ".$datum);
  4. ?>
Offline Thomas - 15/08/2011 00:53
Avatar van Thomas Moderator [quasi offtopic]
Ik hoop dat dit ("14/08/2011") niet het formaat is waarmee je datums in de database opslaat. Dit is een string die een datum bevat zoals je deze zou afdrukken. Dit is om meerdere redenen onpraktisch:
- nu is de huisstijl op je site toevallig dd/mm/yyyy, maar wat als deze verandert, moet je dan al je database-entries aanpassen?
- in deze vorm is het heel moeilijk om door deze datums te zoeken, stel dat je alle items uit een bepaald tijdsinterval wilt hebben, dan wordt het heel pijnlijk met zo'n ddmmyyyy stramien omdat deze niet echt een sortering volgt...

Los van het feit of dit in een database staat of niet, het is verdraaid lastig om hiermee te rekenen / datums te berekenen. Wat ik zou doen is ofwel UNIX-timestamps gebruiken, of het date-formaat (yyyy-mm-dd) of de DateTime Class. In ieder geval: een of andere standaard en niet een custom formaat.
[/quasi offtopic]

Ontopic: Is de datum die je krijgt altijd de maandag? Of een willekeurige dag uit die week? Stel dat de datum die je krijgt een zaterdag of een zondag is, is dit mogelijk? Zoja, welke week wil je dat er geretourneerd wordt?

Ik denk dat als deze vragen beantwoord zijn (dus als de specificatie wat beter is) je een heel eind zult komen met de functies date() en mktime() in combinatie met wat simpel rekenwerk.
Offline Esli - 15/08/2011 01:56
Avatar van Esli PHP interesse @FangorN, zeker geen timestamps, dat is eigenlijk even verkeerd. MySQL heeft zo'n mooie functies aan boord betreffende datums. Een tutorial die dit goed uitlegt is de volgende: http://phptuts.nl/view/1/
Offline Thomas - 15/08/2011 02:15
Avatar van Thomas Moderator Timestamps verkeerd? Wut? Waar haal je die wijsheid vandaan? MySQL heeft inderdaad een arsenaal aan datum/tijd functies, maar ik had de indruk dat HannaH in PHP datums wilde berekenen. Het lijkt me vreemd om daarvoor queries te gaan uitvoeren?

Als je applicaties "voor de eeuwigheid" schrijft, heb je over een jaar of 20 of daaromtrent problemen als je timestamps gebruikt, akkoord, maar voor nu lijkt mij dit prima geoorloofd. Netter zou wellicht het rekenen met de datetime klasse zijn maar ik heb geen idee of dit makkelijk(er) rekent dan gewone timestamps.

Doorgaans wil men eerst iets werkends, daarna kan over een elegantere / efficiëntere oplossing nagedacht worden .

Overigens heb ik reeds lange tijd (10 jaar?) prima met UNIX timestamps uit de voeten gekund. Misschien is het esthetisch minder verantwoord, maar esthetiek is meestal heel snel ondergeschikt aan pragmatisch gebruik.
Offline HannaH - 15/08/2011 09:20
Avatar van HannaH MySQL interesse Hallo,

Ik denk dat deze topic helemaal de focus verloren heeft. 
het gaat erover dat ik de datums in m'n database wil stopen van de week waar ik 1 dag van geselecteerd krijg. en niet het formaat

Ik 'pick' de datum en krijg in het juiste database formaat bvb '2011-08-15'
de datum waar maandag 1 is en ik de weekends niet kan 'picken'

ik wil op basis van die éne datum de hele week in de database stoppen
dus als ik maandag pick -> di, woe , do, vrij
als ik woensdag pick -> ma, di, do, vr
vrijdag -> ma, di, woe, do ...

ik kan dit allemaal opvragen en if-en maar ik vroeg me af of er geen
simpel en mooi stukje code bestaat?



Offline Thomas - 15/08/2011 12:32 (laatste wijziging 15/08/2011 12:34)
Avatar van Thomas Moderator
  1. <?php
  2. /*
  3.  * input: een weekdag (ma-vr) met datumformaat yyyy-mm-dd
  4.  * output: een array met alle dagen van die week als unix timestamp (formaat kun je zelf regelen via date())
  5.  */
  6. function currentWeek($date)
  7. {
  8. list($y, $m, $d) = explode('-', $date);
  9. $unixDate = mktime(0, 0, 0, $m, $d, $y);
  10. $weekDay = date('N', $unixDate);
  11. // hier mogelijk extra controle of $weekDay tussen 1 (maandag) en 5 (vrijdag) ligt
  12. $weekDates = array();
  13. for ($i=1; $i < 6; $i++) {
  14. $weekDates[] = mktime(0, 0, 0, $m, $d - $weekDay + $i, $y);
  15. }
  16. return $weekDates;
  17. } // function currentWeek
  18.  
  19. // test vandaag
  20. foreach (currentWeek('2011-08-15') as $day) {
  21. echo date('D j F Y', $day).'<br />';
  22. }
  23.  
  24. // test maandoverschrijdend
  25. foreach (currentWeek('2011-06-01') as $day) {
  26. echo date('D j F Y', $day).'<br />';
  27. }
  28.  
  29. // test jaaroverschrijdend
  30. foreach (currentWeek('2009-01-01') as $day) {
  31. echo date('D j F Y', $day).'<br />';
  32. }
  33. ?>


EDIT: De datum die je hebt gekozen kun je hier wel uitfilteren.
Bedankt door: HannaH
Offline HannaH - 16/08/2011 10:54
Avatar van HannaH MySQL interesse Schitterend!
dank je wel :- )
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.182s