ik probeer een variabele te generen die op basis van een datum, de volgende maand, kwartaal of jaar kan bepalen.

bijvoorbeeld: vandaag = 30-12-2008 (in de sql database 2008-12-30)

dan zou ik graag de volgende uitvoer willen
$volgendemaand = 2009-01-30
$volgendkwartaal = 2009-03-30
$volgendjaar = 2009-13-30

ik kom er niet uit met bijvoorbeeld dit:
$stopdatum = strtotime("+3 month", $sstart_datum);

ik vermoed omdat ik werk met een date veld en niet met timstamp..

wie kan me even een zetje in de goede richting geven?
Waarom dit niet gewoon met SQL doen?

SELECT
  DATE_FORMAT(datumveld, '%d-%m-%Y) AS vandaag,
  DATE_FORMAT(datumveld + INTERVAL 1 MONTH, '%d-%m-%Y) AS volgende_maand,
  DATE_FORMAT(datumveld + INTERVAL 3 MONTH, '%d-%m-%Y) AS volgend_kwartaal,
  DATE_FORMAT(datumveld + INTERVAL 1 YEAR, '%d-%m-%Y) AS volgend_jaar,
FROM
  tabel
Waarom met PHP gaan klooien wanneer een database tot je beschikking hebt? Daar staat tenslotte ook de data.


SELECT
  datumveld + INTERVAL 1 MONTH;
FROM
  tabelnaam

Wanneer je MONTH verandert in QUARTER, dan komt er ineens een kwartaal bij, bij YEAR tel je er een jaar bij.

Een timestamp is in MySQL, ik vrees dat je die ramp gebruikt, een drama, die gaat op eigen houtje gegevens bijwerken... Die ellende wil je niet gebruiken, blijf daar dan ook vanaf.

Ps. Welke maand is maand nummer 13??? Of dat ook weer zo'n MySQL-blunder?
sorry ik heb mijn vraag niet goed geformuleerd, de datum waarmee ik wil gaan rekenen is een $variabele, de uitkomst wordt uit eindelijk opgeslagen in een date veld in de database
sorry in mijn aller eerste vraagstelling is een blunder van mij... had natuurlijk $volgendjaar = 2009-12-30 moeten zijn

Niet Bumpen:

Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.

SanThe.

<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$nu = '2008-12-30';
list($year, $month, $day) = explode('-', $nu);
echo date('d-m-Y', mktime(0, 0, 0, $month+1, $day, $year)) . '<br/>';
echo date('d-m-Y', mktime(0, 0, 0, $month+3, $day, $year)) . '<br/>';
echo date('d-m-Y', mktime(0, 0, 0, $month, $day, $year+1)) . '<br/>';

?>
Edit: Dit geeft af en toe vreemde resultaten. Probeer '2008-11-30' maar eens.
de uitkomst wordt uit eindelijk opgeslagen in een date veld in de database
Ook bij het invoegen in de database kun je gewoon rekenen met data en tijden. Dus dat moet geen probleem zijn:

INSERT INTO tabel (datumveld)
VALUES ('2008-12-30' + INTERVAL 1 MONTH)

Maar dan is de vraag eerder waarom je al die verschillende data in de database op wilt slaan. Zoals je ziet zijn het gewoon resultaten van een berekening en die sla je in principe niet op maar bereken je zodra je ze nodig hebt.
het gaat over termijnen. in een tabel staat de termijn (interval tussen de datums) ik doe dit zo zodat ik later de termijn van bijvoorbeeld een maand naar een kwartaal kan zetten.

ik sla uiteraard alleen de $nieuwedatum op die ik nodig heb, of de volgende maand, of het volgende kwartaal.... enz.

maar toch leuk dat jullie zo meedenken!
Dan hoef je dus maar één enkele datum en de bijbehorende termijn op te slaan. Met die informatie weet je genoeg om elke volgende datum te kunnen bepalen ;-)
dit is em geworden
<?php
if($stermijn == 'per maand')
{
list($year, $month, $day) = explode('-', $sstart_datum);
$x = date('d-m-Y', mktime(0, 0, 0, $month+1, $day, $year));
}
elseif($stermijn == 'per kwartaal')
{
list($year, $month, $day) = explode('-', $sstart_datum);
$x = date('d-m-Y', mktime(0, 0, 0, $month+3, $day, $year));
}
else //($stermijn == 'per jaar')
{
list($year, $month, $day) = explode('-', $sstart_datum);
$x = date('d-m-Y', mktime(0, 0, 0, $month, $day, $year+1));
}
echo $x;

?>
Waarom 3 keer dezelfde regel als dat niet nodig is?
<?php
list($year, $month, $day) = explode('-', $sstart_datum);
if($stermijn == 'per maand')
{
$x = date('d-m-Y', mktime(0, 0, 0, $month+1, $day, $year));
}
elseif($stermijn == 'per kwartaal')
{
$x = date('d-m-Y', mktime(0, 0, 0, $month+3, $day, $year));
}
else //($stermijn == 'per jaar')
{
$x = date('d-m-Y', mktime(0, 0, 0, $month, $day, $year+1));
}
echo $x;

?>

Edit:
SanThe schreef op 30.12.2008 13:11

Edit: Dit geeft af en toe vreemde resultaten. Probeer '2008-11-30' maar eens.

Reageren