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?
@Remco: Rekenen met SQL is vele malen beter en veel sneller dan via PHP. Een simpele "datum + INTERVAL 1 MONTH" is al voldoende, waarom zou je dan nog 14 regels code gaan schrijven waar je zelfs het risico blijft houden dat het fout kan gaan?
kom ik dan niet hierop uit?
<?php
if($stermijn == 'per maand')
{
$sql_nieuwtermijn = "INSERT INTO contracttermijn
(
contractnr,
termijn,
bedrag,
periode_van,
periode_tot
)
VALUES
(
'$nieuwcontract_id',
'1',
'$sbedrag',
'$sstart_datum',
'$sstart_datum' + INTERVAL 1 MONTH
)
";
}

if($stermijn == 'per kwartaal')
{
$sql_nieuwtermijn = "INSERT INTO contracttermijn
(
contractnr,
termijn,
bedrag,
periode_van,
periode_tot
)
VALUES
(
'$nieuwcontract_id',
'1',
'$sbedrag',
'$sstart_datum',
'$sstart_datum' + INTERVAL 1 QUARTER
)
";
}

if($stermijn == 'per jaar')
{
$sql_nieuwtermijn = "INSERT INTO contracttermijn
(
contractnr,
termijn,
bedrag,
periode_van,
periode_tot
)
VALUES
(
'$nieuwcontract_id',
'1',
'$sbedrag',
'$sstart_datum',
'$sstart_datum' + INTERVAL 1 YEAR
)
";
}

mysql_query($sql_nieuwtermijn);
?>
Het is natuurlijk niet nodig om elke keer die hele query op te nemen. Als je nu eens enkel het variabele deel in een variabele zou zetten...
<?php
switch($termijn)
{
case 'per maand' :
$interval = ' + INTERVAL 1 MONTH ';
break;
case 'per kwartaal' :
$interval = ' + INTERVAL 1 QUARTER ';
break;
case 'per jaar' :
$interval = ' + INTERVAL 1 YEAR ';
break;
default:
$interval = '';
}

$sql = "
INSERT INTO contracttermijn
(
contractnr,
termijn,
bedrag,
periode_van,
periode_tot
)
VALUES
(
'".$nieuwcontract_id."',
1,
'".$sbedrag."',
'".$sstart_datum."',
'".$sstart_datum . $interval ."'
)
";
?>
ps. Overigens zijn die waarden voor $termijn ook erg ongelukkig gekozen. Laat dat 'per' er gewoon uit en je houdt simpel 'maand', 'kwartaal' en 'jaar' over. Weer minder kans op fouten...
Blanche schreef op 30.12.2008 14:39
Overigens zijn die waarden voor $termijn ook erg ongelukkig gekozen. Laat dat 'per' er gewoon uit en je houdt simpel 'maand', 'kwartaal' en 'jaar' over. Weer minder kans op fouten...

Is 1, 3 en 12 (maanden) niet nog veel eenvoudiger?
Uiteraard, in dat geval zou je de variabele $termijn op kunnen nemen in je query om het interval te bepalen...

Reageren