login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Date Array (Opgelost)

Offline mightymike - 28/11/2007 10:32 (laatste wijziging 28/11/2007 10:35)
Avatar van mightymikePHP interesse Goede dag,

ik moet een datum array maken vanaf een opgegeven datum tot een aangegeven datum.
maar er zitten ook nog addertjes onder het gras.

het kan zijn dat het per:

- uur
- dag
- week
- maand
- jaar

op moet lopen.

dus stel dat ik invoer
van datum: 01-01-2000
tot datum: 01-01-2001

dan zal de array dit moeten bevatten
  1. $datum[2000]
  2. $datum[2001]

maar gaat het bijvoorbeeld per maand
dan moet het er zo uit komen te zien

  1. $datum[01-2000]
  2. $datum[02-2000]
  3. $datum[03-2000]
  4. $datum[04-2000]
  5. $datum[05-2000]
  6. //.
  7. //.
  8. //.
  9. $datum[01-2001]


ik zelf gebruik nu de volgende code maar hier mist soms een maand uit (wat ik achteraf ook wel snap);

  1. <?
  2.  
  3. $second = mktime(0,0,1,0,0,0) - mktime(0,0,0,0,0,0);
  4. $minute = mktime(0,1,0,0,0,0) - mktime(0,0,0,0,0,0);
  5. $hour = mktime(1,0,0,0,0,0) - mktime(0,0,0,0,0,0);
  6. $day = mktime(0,0,0,0,1,0) - mktime(0,0,0,0,0,0);
  7. $week = mktime(0,0,0,0,7,0) - mktime(0,0,0,0,0,0);
  8. $month = mktime(0,0,0,1,0,0) - mktime(0,0,0,0,0,0);
  9. $year = mktime(0,0,0,0,0,1) - mktime(0,0,0,0,0,0);
  10.  
  11. //Controle op schaalfilter
  12. switch($aWizardPages[1][values]['scalerate']) {
  13.  
  14. case 1:
  15.  
  16. //uur
  17. $sqldate = "YYYY-MM-DD HH24";
  18. $pdate = "Y-m-d H";
  19. $count = $hour;
  20. $detail = tell("HOUR");
  21. break;
  22.  
  23. case 2:
  24.  
  25. //dag
  26. $sqldate = "YYYY-MM-DD";
  27. $pdate = "Y-m-d";
  28. $count = $day;
  29. $detail = tell("DAY");
  30. break;
  31.  
  32. case 3:
  33.  
  34. //week
  35. $sqldate = "YYYY WW";
  36. $pdate = "Y W";
  37. $count = $week;
  38. $detail = tell("WEEK");
  39. break;
  40.  
  41. case 4:
  42.  
  43. //maand
  44. $sqldate = "YYYY-MM";
  45. $pdate = "Y-m";
  46. $count = $month;
  47. $detail = tell("MONTH");
  48. break;
  49.  
  50. case 5:
  51.  
  52. //jaar
  53. $sqldate = "YYYY";
  54. $pdate = "Y";
  55. $count = $year;
  56. $detail = tell("YEAR");
  57. break;
  58.  
  59. }
  60.  
  61. //Creer een data array
  62. $x = 0;
  63. for($i=strtotime($aWizardPages[1][values][datumvan]);$i<strtotime($aWizardPages[1][values][datumtot]);$i+=$count) {
  64.  
  65. $data[date($pdate, $i)] = array();
  66. $data[$x] = date($pdate, $i);
  67.  
  68. $x++;
  69.  
  70. }


hopend dat iemand mij kan helpen.

Met vriendelijke groet,

Michael

5 antwoorden

Gesponsorde links
Offline Thomas - 28/11/2007 11:20 (laatste wijziging 28/11/2007 11:21)
Avatar van Thomas Moderator Ik zou $data niet telkens (elke stap van de lus) berekenen, maar eenmalig wat berekeningen uitvoeren. Een heleboel dingen liggen al vast, zoals het aantal uren in een dag, het is niet echt zinnig om hier aan te rekenen.
Het aantal dagen in een maand ligt ook voor een groot deel vast, enige uitzondering is februari in een schrikkelaar.
Het aantal weken / de "week van het jaar" kan tricky zijn, omdat een nieuwe maand niet altijd aan het begin van een nieuwe week begint (en wanneer begint een nieuwe week? zondag of maandag?).

Bereken $data in de cases zelf, en probeer dit niet in één keer achteraf te doen. Dit maakt debuggen ook makkelijker denk ik, dit kun je dan per geval doen, in plaats van je uiteindelijke eenmalige $data-berekening zo proberen te buigen dat deze in alle cases werkt (wat misschien niet mogelijk is).
Offline mightymike - 28/11/2007 11:34
Avatar van mightymike PHP interesse het tricky valt wel mee
ik zal even een voorbeeld geven hoe alle arrayvormen er uit kunnen komen te zien

  1. $data[01-01-2007 01] //Per uur
  2. $data[01-01-2007] //Per Dag
  3. $data[2007 01] //Per week
  4. $data[01-2007] //Per maand
  5. $data[2007] //Per jaar


het script dat ik had werkt perfect alleen als ik per maand doe gaat hij 1x in de zoveel rondes op zijn bek dan mist er 1 maand tussen,...
Offline Thomas - 28/11/2007 11:45
Avatar van Thomas Moderator Ik zou ook zoveel mogelijk via een standaard werken (datetime). Enige uitzondering hierop is dan je week-variant...
Offline marten - 28/11/2007 11:48
Avatar van marten Beheerder Mike,
heb je rekening gehouden met schrikkeljaren en dergelijke?
Offline mightymike - 28/11/2007 13:52
Avatar van mightymike PHP interesse heb het inmiddels al geregeld door de mktime functie op een andere manier te gebruiken

  1. //Controle op schaalfilter
  2. switch($aWizardPages[1][values]['scalerate']) {
  3.  
  4. case 1:
  5.  
  6. //uur
  7. $sqldate = "YYYY-MM-DD HH24";
  8. $pdate = "Y-m-d H";
  9. $detail = tell("HOUR");
  10. break;
  11.  
  12. for($x=0; $x<=(datediff('h',$aWizardPages[1][values][datumvan], $aWizardPages[1][values][datumtot])+1); $x++){
  13.  
  14. $data[$x] = date($pdate,mktime(date('H', strtotime($aWizardPages[1][values][datumvan])) + $x,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan]))));
  15. $data[date($pdate,mktime(date('H', strtotime($aWizardPages[1][values][datumvan])) + $x,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan]))))] = array();
  16.  
  17. }
  18.  
  19. case 2:
  20.  
  21. //dag
  22. $sqldate = "YYYY-MM-DD";
  23. $pdate = "Y-m-d";
  24. $detail = tell("DAY");
  25.  
  26. for($x=0; $x<=(datediff('d',$aWizardPages[1][values][datumvan], $aWizardPages[1][values][datumtot])+1); $x++){
  27.  
  28. $data[$x] = date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])) + $x,date('Y', strtotime($aWizardPages[1][values][datumvan]))));
  29. $data[date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])) + $x,date('Y', strtotime($aWizardPages[1][values][datumvan]))))] = array();
  30.  
  31. }
  32.  
  33. break;
  34.  
  35. case 3:
  36.  
  37. //week
  38. $sqldate = "YYYY WW";
  39. $pdate = "Y W";
  40. $detail = tell("WEEK");
  41.  
  42. for($x=0; $x < datediff('ww',$aWizardPages[1][values][datumvan], $aWizardPages[1][values][datumtot]); $x++){
  43.  
  44. $data[$x] = date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])) + (7 * $x),date('Y', strtotime($aWizardPages[1][values][datumvan]))));
  45. $data[date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])) + (7 * $x),date('Y', strtotime($aWizardPages[1][values][datumvan]))))] = array();
  46.  
  47. }
  48.  
  49. break;
  50.  
  51. case 4:
  52.  
  53. //maand
  54. $sqldate = "YYYY-MM";
  55. $pdate = "Y-m";
  56. $detail = tell("MONTH");
  57.  
  58. for($x=0; $x<=(datediff('m',$aWizardPages[1][values][datumvan], $aWizardPages[1][values][datumtot])+1); $x++){
  59.  
  60. $data[$x] = date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])) + $x,date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan]))));
  61. $data[date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])) + $x,date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan]))))] = array();
  62.  
  63. }
  64.  
  65. break;
  66.  
  67. case 5:
  68.  
  69. //jaar
  70. $sqldate = "YYYY";
  71. $pdate = "Y";
  72. $detail = tell("YEAR");
  73.  
  74. for($x=0; $x<=datediff('yyyy',$aWizardPages[1][values][datumvan], $aWizardPages[1][values][datumtot]); $x++){
  75.  
  76. $data[$x] = date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan])) + $x));
  77. $data[date($pdate,mktime(0,0,0,date('m', strtotime($aWizardPages[1][values][datumvan])),date('d', strtotime($aWizardPages[1][values][datumvan])),date('Y', strtotime($aWizardPages[1][values][datumvan])) + $x))] = array();
  78.  
  79. }
  80. break;
  81.  
  82. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.246s