[PHP] Datum volgende facturatie uitrekenen

Pagina: 1
Acties:

Onderwerpen


  • Snow_King
  • Registratie: April 2001
  • Laatst online: 17:19

Snow_King

Konijn is stoer!

Topicstarter
Hallo,

Ik zit met een probleem met PHP.

Situatie
Ik heb een systeem met producten en geef daar bij aan:
- Datum dat het product in gebruik is genomen (UNIX_TIMESTAMP)
- Om de hoeveel maanden een factuur moet worden verstuurd (bijv 3, 6 of 12)

Wat wil ik?
Uitrekenen wanneer de volgende factuur moet komen.

$array is een resultaat uit de MySQL database, evenals $row, het komt alleen uit andere tabellen.

Wat heb ik aan code
code:
1
2
3
$timestamp = 3600 * 24 * 30 * $row["facturatie_periode"];
$diff = time() - $array["date_added"];
$nextfactuur = $timestamp - $diff + time();


Nu weet ik, een maand is niet altijd 30 dagen (365/12 = 30.41)
De ene maand is 31 dagen en de andere 30 dagen, óf zelfs maar 28 dagen.

Ik heb een product wat in gebruik is genomen op 01-01-2004, zet ik facturatie_periode op 12, kom ik uit op 25-12-2004 :) Klopt dus perfect. die 6 dagen die ik mis komen doordat de ene maand 31 dagen heeft en de ander 30.

Zet ik de facturatie periode op 3 maanden, krijgt ik 30-03-2004.

Dat moet dus 01-10-2004 zijn.

Nu moet je zoiets kunnen opvangen met een if/else constructie.

Wat is nu mijn probleem?
Hoe vang ik de maanden op die 31 dagen hebben of zelfs maar 28/29 dagen?
Hoe vang ik het probleem op als de periode staat op 3 of 6 maanden?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Kan je met MkTime niet wat doen? :) Je weet immers de dag, maand en jaar. Tel daar het aantal maanden bij op (van facturatie, gecorrigeerd met het jaar), gebruik mktime en je kan een verschil in dagen uitrekeken :)

[ Voor 72% gewijzigd door gorgi_19 op 30-09-2004 14:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Snow_King
  • Registratie: April 2001
  • Laatst online: 17:19

Snow_King

Konijn is stoer!

Topicstarter
Daar heb ik dus ook naar gekeken.

Via date() het omzetten naar losse maanden, dagen en jaren.
Bij de maand gewoon de facturatie periode optellen, maarrr.

Stél je hebt dan weer de periode staan op 3 maanden, zit je met het probleem dat je weer facturen in het verleden krijgt.

Je moet dan de periode blijven optellen tot je een datum in de toekomst krijgt, maar hoe?

Ok, ik heb wat gebrouwd!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$dag_added = date("d", $array["date_added"]);
    $maand_added = date("m", $array["date_added"]);
    $jaar_added = date("Y", $array["date_added"]);
    
    $dag_now = date("d", time());
    $maand_now = date("m", time());
    $jaar_now = date("Y", time());

    $nextfactuur = mktime(0, 0, 0, $maand_added + $row["facturatie_periode"], $dag_added, $jaar_added);
    $dag_next = date("d", $nextfactuur);
    $maand_next = date("m", $nextfactuur);
    $jaar_next = date("Y", $nextfactuur);
    
    while($nextfactuur < time()){
        $nextfactuur = mktime(0, 0, 0, $maand_next + $row["facturatie_periode"], $dag_next, $jaar_next);
    }


Alleen krijg ik hierdus een end-less loop, stom natuurlijk.

Maar waar kijk ik nu overheen? Ik doe iets fout bij die loop.

[ Voor 52% gewijzigd door Snow_King op 30-09-2004 14:40 ]


Verwijderd

ik weet niet zeker of dit precies is wat je wilt, maar je zou de strtotime functie kunnen gebruiken:

PHP:
1
$next = strtotime("3 months")


dan krijg je een timestamp van de huidige datum + 3 maanden

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 17:19

Snow_King

Konijn is stoer!

Topicstarter
Ja, geweldig!
code:
1
2
3
4
5
6
7
8
9
$dag_added = date("d", $array["date_added"]);
$maand_added = date("m", $array["date_added"]);
$jaar_added = date("Y", $array["date_added"]);
    
$nextfactuur = mktime(0, 0, 0, $maand_added + $row["facturatie_periode"], $dag_added, $jaar_added);
    
while($nextfactuur < time()){
        $nextfactuur = strtotime($row["facturatie_periode"] ." months", $nextfactuur);
}


Bedankt mensen!

[ Voor 16% gewijzigd door Snow_King op 30-09-2004 15:16 ]