Toon posts:

[ALG] Berekening periode in maanden, weken en dagen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allen

Ik zit met een probleem/opmerking waarvoor volgens mij geen oplossing is. ;)

Ik heb een datum en de systeemdatum, maakt niet uit in welke programmeertaal.
Nu wil ik de periode tussen deze beide data uitdrukken in maanden, weken en dagen.
Indien ik nu b.v. de datum neem van 16 januari 2007 tot nu (26 maart 2007) dan geeft die heel mooi aan: 2 maanden, 1 week en 3 dagen, hetgeen juist is. Indien ik echter opgeef als datum 30 december 2006 dan krijg ik een verkeerde periode, namelijk 2 maanden, 3 weken en 5 dagen. Het probleem zit hem in de maandbepaling. De vraag is namelijk: tel 2 maanden op bij 30 december. Waar kom je dan op uit? Is dat 28 februari of is dat 2 of 3 maart? Is de periode tussen 29 december en vandaag en tussen 31 december en vandaag evenlang, omdat 29 december plus 2 maanden gelijk is aan 28 februari en 31 december en 2 maanden dat ook is?? Ik weet het, de enige oplossing is de periode op een andere manier aangeven. Dus NIET in maanden. En als ik dan kijk naar b.v. de site www.tickerfactory.com, dan zit men daar met hetzelfde (en andere) problemen.... ;)

Gegroet
De Roeje

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Je kunt de datum (met tijd) omzetten naar een unix timestamp. Dit is een getal in seconden vanaf 1 jan 1970. Met dit getal kun zeer gemakkelijk rekenen.

Verder zou je ook nog iets kunnen bedenken met een array hoeveel dagen de maanden hebben en daarmee gaan rekenen.

Wat ik zelf vaak ook wel doe is dit soort dingen via mysql. Deze heeft daarvoor gemakkelijke functies zoals datum_add().

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Verwijderd

Topicstarter
Ja, dat snap ik wel. Maar het gaat om de vraag wat 30 december plus 2 maanden is. Is dit gelijk aan 28 februari? Dan is dit gelijk aan de periode van 29 december en 31 december. Of is 30 december plus 2 maanden ergens begin maart (plus 30 of 31 dagen) maar dan is het weer gelijk aan de periode van b.v. 2 januari plus 2 maanden ;) Eigenlijk kun je de periode dan niet in maanden uitdrukken maar alleen in weken en dagen....

Bedankt voor je reactie :)

Groetjes
De Roeje

  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 14-11 02:01
Het probleem met tijdsspannes is dat een heleboel grootheden relatief zijn.
Zoals je zelf al aangeeft: Maanden uitgedrukt in dagen verschillen van 28 tot 31 dagen.
Jaren kunnen 365 of 366 dagen hebben.
Als er gewisseld wordt van zomer- naar wintertijd of andersom dan hebben dagen opeens 23 of 25 uren.

Oftewel, je moet eerst bepalen hoe je met dit soort grootheden omgaat voordat je een beslissing kan nemen.

Wat betreft het met maanden rekenen: In de gangbare logica is volgens mij het meest gebruikte uitgangspunt het ophogen of verlagen van het maandnummer. Dus 4 februari + 2 maand = 4 april. 15 Januari - 1 maand = 15 december.

Bottomline: als je een tijdspanne helemaal correct wil uitdrukken, gebruik dan geen relatieve grootheden maar ga uit van vaste grootheden als seconden.

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Arty_Shock schreef op maandag 26 maart 2007 @ 15:39:
Wat betreft het met maanden rekenen: In de gangbare logica is volgens mij het meest gebruikte uitgangspunt het ophogen of verlagen van het maandnummer. Dus 4 februari + 2 maand = 4 april. 15 Januari - 1 maand = 15 december.
Lukt alleen niet zo goed als de dag niet in de eindmaand zit, zoals de topicstarter al schetste met een voorbeeld ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 14-11 02:01
.oisyn schreef op maandag 26 maart 2007 @ 15:59:
Lukt alleen niet zo goed als de dag niet in de eindmaand zit, zoals de topicstarter al schetste met een voorbeeld ;)
Of ik lees de openingspost nog eens even goed. 8)7
Ik was zo overtuigd dat ik iets moest tikken dat ik dat deed voordat ik de post goed en wel had doorgelezen.

Maar goed, in libraries van diverse programmeertalen zie je meestal dat je twee opties hebt: aftoppen of doorrekenen.

Aftoppen: 31 januari + 1 maand = 28 februari (of 29 februari in het geval van een schrikkeljaar).
Doorrekenen: 31 januari + 1 maand = 3 maart (of 2 maart in het geval van een schrikkeljaar).

De beslissing ligt bij de gebruiker. Er is geen universeel antwoord op deze vraag mogelijk volgens mij.
Pagina: 1