Aggiunta di giorni a $ Date in PHP


225

Ho una data restituita come parte di una query mySQL nel modulo 2010-09-17

Vorrei impostare le variabili $ Date2 su $ Date5 come segue:

$Date2 = $Date + 1

$Date3 = $Date + 2

eccetera..

in modo che ritorni 2010-09-18, 2010-09-19ecc ...

Ho provato

date('Y-m-d', strtotime($Date. ' + 1 day'))

ma questo mi dà la data PRIMA $Date.

Qual è il modo corretto per ottenere le mie date nel formato "Ymd" in modo che possano essere utilizzate in un'altra query?


Risposte:


468

Tutto quello che devi fare è usare daysinvece di daycosì:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Ed emette correttamente:

2010-09-18
2010-09-19

7
Emette correttamente usando altrettanto daybene ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis

Ho appena provato in questo modo e ha funzionato. Non ho ancora idea del motivo per cui ho ricevuto un valore un giorno prima della data di inizio quando l'ho provato inizialmente.
Istari

E se avessi una variabile per il numero di giorni da aggiungere?
Carlos Martins

3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
Pradeep Kumar Prabaharan

No, questo metodo non funziona affatto. Sta tornando una data del 2004.
gegobyte

87

Se stai usando PHP 5.3, puoi usare un DateTimeoggetto e il suo addmetodo:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Dai un'occhiata alla pagina del manuale del DateIntervalcostruttore per vedere come costruire altri periodi da aggiungere alla tua data (2 giorni sarebbero 'P2D', 3 sarebbero'P3D' e così via).

Senza PHP 5.3, dovresti essere in grado di usare strtotimeil modo in cui lo hai fatto (l'ho testato e funziona sia in 5.1.6 che in 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Scusa Daniel, ma il server web esegue php 5.2.6, quindi non funzionerà
Istari

2
DateTime::constructutilizza lo stesso meccanismo utilizzato strtotimeper analizzare la data, quindi puoi anche fare new DateTime("+1 day $date")ciò che non richiederebbe 5.3
Gordon

Non volevo svalutare questo, ma in qualche modo l'ho fatto = /
Steven

Questa è la risposta effettiva per php 5.5+
TheLegendaryCopyCoder

29

Da PHP 5.2 in poi puoi usare la modifica con un oggetto DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Fai attenzione quando aggiungi mesi ... (e in misura minore anni)


la risposta accettata fornisce solo una risposta per più di 15000 giorni, dove questa risposta dà una risposta quando si aggiungono anche più di 25000 giorni ..
Pradeep Kumar Prabaharan

Puoi anche interrogarlo su un DateTimeImmutable () e ottieni una copia modificata senza il rischio di alterare l'originale.
Xavi Montero

17

Ecco un piccolo frammento per dimostrare le modifiche alla data:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

puoi per favore vedere il mio (quesiton) correlato [stackoverflow.com/q/61421783/8919244 ] ?
Moeez

8

Puoi anche utilizzare il seguente formato

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Puoi impilare le modifiche in questo modo:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Nota la differenza tra questo approccio e quello nelle altre risposte: invece di concatenare i valori +1 daye <timestamp>, puoi semplicemente passare il timestamp come secondo parametro di strtotime.


5

Ecco la soluzione più semplice alla tua domanda

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result

5

Utilizzo di una variabile per Numero di giorni

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo new Date('d/m/Y', $soma); //format new date 


0

Tutti devono usare il codice seguente:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

1
Non dovresti farlo in questo modo, alla fine avrai problemi con i secondi intercalari
Nathan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.