[Bash/Linux] Rekenen met maanden op de 31ste van de maand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 09:09
Vandaag is het weer de 31ste van de maand en dat levert weer eens leuke resultaten op als je met datums gaat rekenen.

Voor allerhande dingen gebruik ik regelmatig dingen als:
PHP:
1
strtotime('+1 month'); of strtotime('-1 month');


Maar op de 31ste levert dat toch wat problemen op kwam ik vandaag achter. Bijvoorbeeld in PHP:
PHP:
1
2
echo date('d-m-Y', strtotime('+1 month')); // 01-12-2011
echo date('d-m-Y', strtotime('-1 month')); // 01-10-2011


In PHP is dit op te lossen door te doen (ik heb in mijn geval niet zozeer de datum nodig, maar vooral de maand) (5.3+):
PHP:
1
2
echo date('d-m-Y', strtotime('first day of +1 month')); // 01-11-2011 
echo date('d-m-Y', strtotime('first day of -1 month')); // 01-09-2011


Ruby snap 't gewoon en dat levert dit op:
code:
1
2
3
4
5
>> 1.month.ago
=> Fri Sep 30 15:37:29 +0000 2011

>> 1.month.from_now
=> Wed Nov 30 15:50:39 +0000 2011


Maar hoe krijg ik dit voor elkaar in (linux) bash met behulp van /bin/date?

Want ook date doet dit:
code:
1
2
3
4
5
$ /bin/date +%Y-%m-%d -d "1 months ago"
2011-10-01

$ /bin/date +%Y-%m-%d -d "+1 month"
2011-12-01


Dingen als dit werken niet:
code:
1
$ /bin/date +%Y-%m-%d -d "first day of 1 month ago"


Iemand anders een idee?

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
Probleem is natuurlijk dat de definitie van "een maand geleden" onduidelijk is wanneer je op de 31e zit en de vorige en volgende maand maar 30 dagen hebben. Als je alleen geïnteresseerd bent in de maand (klopt dat?) dan raadt de GNU documentatie aan om het verschil ten opzichte van de 15e dag van de huidige maand te nemen.

Voorbeeld (voor vandaag, 31 Oktober):
$ date --date="`date +%Y-%m-15` -1 month" +%B
September
$ date --date="`date +%Y-%m-15` +1 month" +%B
November

Lost dat je probleem op?

Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 09:09
Top, daar kan ik wat mee. Logisch natuurlijk.

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

En waarom reken je niet gewoon van de eerst van de maand tot de eerste van de volgende maand?
Dus vanaf '2011-10-01 0:00:00' tot '2011-11-01 0:00:00' en dan heb je helemaal geen last van 28, 30 of 31 dagen in de maand.

Ik zou namelijk nier durven zeggen wat de officiële standaard is om vanaf 31 oktober een maand vooruit of achteruit te gaan. Omdat wij er vanuit gaan dat tijd vooruit gaat, vermoed ik dat je dan op 1 december hoort uit te komen en niet op 30 november.

If it isn't broken, fix it until it is..