login  Naam:   Wachtwoord: 
Registreer je!
 Forum

datum optellen na selectie periode

Offline lau - 26/12/2008 13:24
Avatar van lauHTML interesse Ik heb een formulier gemaakt waarin je startdatum (dag/maand/jaar) moet selecteren dmv dropdowns
Vervolgens moet je aantal periodes in maanden selecteren.
Daaronder moet dan de output van einddatum staan die dus startdatum + periodes heeft opgeteld.
Maar ik heb geen flauw idee hoe ik dat het beste in javascript kan doen. Ik wil liever niet met PHP doen, omdat het dan moet refreshen.

21 antwoorden

Gesponsorde links
Offline mathiasB - 26/12/2008 14:29
Avatar van mathiasB HTML interesse Kan je even een html pagina hiervan tonen of een screenshot? want ik zie de bedoelig niet echt.
Offline lau - 26/12/2008 22:05 (laatste wijziging 27/12/2008 01:09)
Avatar van lau HTML interesse Dit is de pagina: http://www.4dimension.nl/garantie.php
Javascript code is te zien bij broncode

Dus, je voert dag, maand en jaar in bij startdatum. Je kiest aantal maanden voor je periode. Bij einddatum moet daarna aan de hand van gekozen maanden een output weergegeven worden in de vorm van 'dag', 'maand' en 'jaar'. Zelfde format als startdatum.

Maar ik heb geen flauw idee hoe dat in javascript kan. Ik kan fatsoenlijk een geselecteerde datum ophalen, maar ik kan geen periode toevoegen  
Offline Gerard - 27/12/2008 02:17
Avatar van Gerard Ouwe rakker refresh hoeft natuurlijk niet als je gebruik maakt van ajax. Op die manier kan je de kracht van PHP combineren.
Offline mathiasB - 27/12/2008 18:32
Avatar van mathiasB HTML interesse Werkt
  1. <select name="startdag" id="startdag" onChange="javascriptfunctie()">
niet?
Offline henver - 27/12/2008 18:36
Avatar van henver HTML gevorderde @mathiasB: dat wist hij ook wel denk ik, hij moet alleen wel een werkende functie hebben 
Offline lau - 27/12/2008 21:35
Avatar van lau HTML interesse whaha.. jah... ik heb wel een functie.. maar hij telt aantal maanden niet goed bij op.
Offline Koen - 28/12/2008 12:56 (laatste wijziging 28/12/2008 16:56)
Avatar van Koen PHP expert Als je die functie niet laat zien kunnen we weinig voor je doen hoor 
Edit: had je voorbeeld niet gezien, sorry :-)
Offline mathiasB - 28/12/2008 14:00 (laatste wijziging 28/12/2008 14:03)
Avatar van mathiasB HTML interesse Hij doet de maanden inderdaad niet goed, er komt op mysterieuze wijze "11" voor te staan. ... ik kijk er wel even naar

Edit: Je kan natuurlijk altijd proberen er gewoon 1100 af te trekken maar dat is cheap 
Offline lau - 28/12/2008 22:31
Avatar van lau HTML interesse @mathias.. nee.. daar begin ik niet aan. Voor elk ander maand geldt weer een ander combinatie.
Offline henver - 29/12/2008 20:29 (laatste wijziging 29/12/2008 20:30)
Avatar van henver HTML gevorderde Pagina met formulier:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Datum</title>
  6. </head>
  7.  
  8.  
  9. <script language="javascript" type="text/javascript">
  10. <!--
  11. // Get the HTTP Object
  12. function getHTTPObject(){
  13. if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
  14. else if (window.XMLHttpRequest) return new XMLHttpRequest();
  15. else {
  16. alert("Uw browser oncdersteunt geen Ajax.");
  17. return null;
  18. }
  19. }
  20.  
  21. // Change the value of the outputText field
  22. function setOutput(){
  23. if(httpObject.readyState == 4){
  24. document.getElementById('einddatum').innerHTML = httpObject.responseText;
  25. }
  26. }
  27.  
  28. // Implement business logic
  29. function doWork(){
  30. httpObject = getHTTPObject();
  31. if (httpObject != null) {
  32. httpObject.open("GET", "datum.php?dag="+document.getElementById('dag').value+"&maand="+document.getElementById('maand').value+"&jaar="+document.getElementById('jaar').value+"&periode="+document.getElementById('periode').value, true);
  33. httpObject.send(null);
  34. httpObject.onreadystatechange = setOutput;
  35. }
  36. }
  37.  
  38. var httpObject = null;
  39.  
  40. //-->
  41.  
  42. <form name="datum">
  43. <table><tr><td>Dag: </td>
  44. <td><select name="dag" id="dag" onchange="doWork();">
  45. <option value=""></option>
  46. <option value="1">1</option>
  47. <option value="2">2</option>
  48. </select>
  49. </td></tr>
  50. <tr><td>Maand: </td>
  51. <td><select name="maand" id="maand" onchange="doWork();">
  52. <option value=""></option>
  53. <option value="1">Januari</option>
  54. <option value="2">Februari</option>
  55. </select>
  56. </td></tr>
  57. <tr><td>Jaar: </td>
  58. <td><select name="jaar" id="jaar" onchange="doWork();">
  59. <option value=""></option>
  60. <option value="2000">2000</option>
  61. <option value="2001">2001</option>
  62. </select>
  63. </td></tr>
  64. <tr><td>Periode:
  65. <td><select name="periode" id="periode" onchange="doWork();">
  66. <option value=""></option>
  67. <option value="2592000">1 maand</option>
  68. <option value="5184000">2 maanden</option>
  69. </select>
  70. </td></tr>
  71. <tr><td>Einddatum: </td>
  72. <td><span id="einddatum"></span></td></tr></table>
  73. </form>
  74. </body>
  75. </html>


datum.php:
  1. <?
  2. $dag = (int)$_GET['dag'];
  3. $maand = (int)$_GET['maand'];
  4. $jaar = (int)$_GET['jaar'];
  5. $periode = (int)$_GET['periode'];
  6.  
  7. if($dag != '' && $maand != '' && $jaar != '' && $periode != ''){
  8. $datum = mktime(0,0,0,$maand,$dag,$jaar);
  9.  
  10. $einddatum = $datum + $periode;
  11. $einddatum = date("d/m/Y", $einddatum);
  12.  
  13. echo $einddatum;
  14. }
  15. ?>


Omerking: Periodes zijn in secondes
Offline lau - 29/12/2008 23:24
Avatar van lau HTML interesse Vreemd genoeg geef hij bij 31 december 2008 met 2 maanden dit aan: 03/03/2009.
Terwijl ik als ik dit met MySQL output er keurig 28 februari 2009 uit komt.
Offline henver - 29/12/2008 23:40
Avatar van henver HTML gevorderde Ja, hangt ervan af hoeveel dagen er voor een maand worden gekozen. Weet niet of er in PHP iets bestaat om dit exact te berekenen. Maar je snapt nu wel in ieder geval het principe denk ik (hoe je met Javascript (Ajax) kunt communiceren met een andere pagina).
Offline lau - 29/12/2008 23:43
Avatar van lau HTML interesse Ja, veel minder javascript dan ik dacht, ik vreesde dat ik weer die pakketten moest includen zoals scriptaculous.

Maar in PHP kan ik niets vinden over exact maand uitrekening.
Ik heb nu dit:
  1. $dag = (int)$_GET['dag'];
  2. $maand = (int)$_GET['maand'];
  3. $jaar = (int)$_GET['jaar'];
  4. $periode = (int)$_GET['periode'];
  5.  
  6. if($dag != '' && $maand != '' && $jaar != '' && $periode != ''){
  7. $datum = mktime(0,0,0,$maand+$periode,$dag,$jaar);
  8.  
  9. $einddatum = date("d/m/Y", $datum);
  10.  
  11. echo $einddatum;
  12. }

Waarbij ik exact +1 als het 1 maand is en +2 als het 2 maanden is etc.
Offline henver - 29/12/2008 23:47
Avatar van henver HTML gevorderde Ja maar daar moet je mee oppassen: sommige dagen hebben 30 dagen, sommige 31 en februari 28 of 29. Dus dit klopt niet altijd. Ook de maanden zullen niet altijd kloppen: het is bijvoorbeeld augustus (8) en je telt er 6 maanden bij. Zo zul je dus op 14 uitkomen, wat dus ook niet kan.

Ik zal eens verder zoeken naar een oplossing, maar dat is iets voor morgen.
Offline vinTage - 29/12/2008 23:56
Avatar van vinTage Nieuw lid als je gewoon PHP.net: mktime gebruikt, dan kan je zoiets doen:

mktime(0,0,0,maand+X,dag,jaar)

Het jaar etc word dan vanzelf mee aangepast en er wordt rekening gehouden met de dagen in de maand.
Offline lau - 30/12/2008 00:27
Avatar van lau HTML interesse @vinTage... als je naar mijn php code kijkt zie je dat ik dat al heb toegepast. $periode is dus in aantal maanden, dus daar zit het probleem niet.
Het probleem is nu juist dat jaar en dagen niet automatisch aanpassen aan de maanden
Offline vinTage - 30/12/2008 03:00 (laatste wijziging 30/12/2008 03:01)
Avatar van vinTage Nieuw lid echo date("d-m-Y", mktime(0, 0, 0, date("m")+3) );

geeft netjes 3 maanden verderop hoor...
jaartal word ook gwn opgeteld
Offline henver - 30/12/2008 10:32
Avatar van henver HTML gevorderde @VinTage: Ja, maar hij wilt, dat wanneer er bij bijvoorbeeld 31 januari 1 maand wordt opgeteld, het resultaat 28/29 februari is. (Denk ik toch)
Offline Pellens - 30/12/2008 10:37
Avatar van Pellens PHP interesse Dat gaat met mktime... probeern maar eens tegoei.
Ik heb het ook al zo gedaan hoor!
Offline henver - 30/12/2008 10:41
Avatar van henver HTML gevorderde http://www.vervloessem.com/scripts/datum/

Probeer maar eens: neem 31 januari en tel er 1 maand bij op: ik kom steeds uit op 3 maart...
Offline lau - 30/12/2008 10:43
Avatar van lau HTML interesse Jah... dat probleem wat henver omschrijft is dus het probleem. mktime is wel toepasbaar, maar ik krijg geen exact 1 maand wat wel het geval is met MySQL en ADDDATE functie.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.225s