Eventuali duplicati:
PHP DateTime::modify adding and subtracting monthsCome aggiungere 1 mese in una data senza saltare cioè febbraio
ho una data di inizio (ad esempio 2011-01-30) e si desidera aggiungere 1 mese.
Il problema è nel definire cos'è un mese. Quindi, se io uso il seguente codice:
$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');
$d1->add(new DateInterval('P1M'));
echo $d1->format('Y-m-d H:i:s');
ottengo il seguente risultato: 2011-03-02 15:57:57
Il problema è che ho bisogno di utilizzare le seguenti regole:
- Se aggiungo 1 mese sarà solo aggiungere 1 da parte mese e lasciare la parte giorno (2011-01-15 diventerà 2011-02-15)
- Se il giorno non è esistente nel il mese che termineremo, prendiamo l'ultimo giorno esistente di questo (2011-01-30 diventerà 2011-02-28)
Esiste una funzione comune in php che può eseguire questa operazione o devo codificarla da solo? Forse mi manca solo un parametro o qualcosa del genere !?
Se si sta ripetendo più mesi, è necessario fare attenzione a non rimanere "bloccati" il 28. ad esempio, se inizi a 1/30 .. 2/28 .. 3/28, quando probabilmente vorrai 3/30. – Matthew
Ho recentemente affrontato questa implementazione di un sistema di fatturazione commerciale. Non esiste una soluzione pre-cotta. Devi tenere traccia del tuo giorno di inizio, aumentare il mese, vedere se quel giorno esiste nel mese successivo, in caso contrario, utilizzare l'ultimo giorno del mese. In realtà non è terribilmente complicato, ma sentirai che non dovresti scrivere così tanto codice. – Endophage
Il requisito qui è di aggiungere * mesi di calendario *. Passare al 1 ° del mese, aggiungere i mesi desiderati, quindi tornare al numero del giorno iniziato * o * l'ultimo giorno del nuovo mese se il mese è in corto rispetto al numero del giorno iniziale. – Jason