PHP, obtenir la date de demain à partir de la date

88

J'ai une date PHP sous la forme de 2013-01-22et je veux obtenir la date de demain dans le même format, par exemple 2013-01-23.

Comment est-ce possible avec PHP?

Justin
la source

Réponses:

201

Utiliser DateTime

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

Ou:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

Ou:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

Ou en PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');
John Conde
la source
1
Cela utilise le courant, je dois passer à une date donnée.
Justin
La deuxième façon est probablement la meilleure.
nickb
72
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

ou

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

Lien d'aide: STRTOTIME ()

Laura Chesches
la source
1
J'ai utilisé celui-ci et de toutes les réponses est la version la plus courte et la plus simple, merci!
Bombelman
17

Depuis que vous l'avez tagué avec , vous pouvez l'utiliser avec le +1 daymodificateur comme ceci:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

Cela dit, c'est une bien meilleure solution pour utiliser DateTime .

Rudi Visser
la source
14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>
Andy
la source
17
Notez que cela échouera dans les cas extrêmes (heure d'été).
JJJ
Cette réponse est fausse. J'ai un cronjob qui utilise ceci en boucle, et le système est mort.
jewelnguyen8
5

echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));

ABDUL JAMAL
la source
3

Utilisez DateTime:

Pour obtenir demain à partir de maintenant:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Résultats: 28/06/2017 08.13.20

Pour obtenir demain à partir d'une date:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Résultats: 06/11/2017 08.16.35

J'espère que ça aide!

Gregorio
la source
1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}
crmpicco
la source
1

Par étrange, il peut sembler que cela fonctionne parfaitement bien: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

Devrait le faire

Diogo Neves - Mangaru
la source
0

Premièrement, trouver des abstractions correctes est toujours une clé. clé de la lisibilité, de la maintenabilité et de l'extensibilité.

Ici, un candidat assez évident est un ISO8601DateTime. Il existe au moins deux implémentations: la première est une date / heure analysée à partir d'une chaîne et la seconde est demain. Par conséquent, il existe deux classes qui peuvent être utilisées et leur combinaison aboutit au résultat (presque) souhaité:

new Tomorrow(new FromISO8601('2013-01-22'));

Les deux objets sont une date / heure ISO8601, leur représentation textuelle n'est donc pas exactement ce dont vous avez besoin. Le coup final est donc de leur faire prendre une forme de date:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

Puisque vous avez besoin d'une représentation textuelle, pas seulement d'un objet, vous invoquez un value() méthode.

Pour en savoir plus sur cette approche, jetez un œil à cet article .

Vadim Samokhin
la source
-1

voici la fonction de travail

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }
Muhammad Awais Zulifqar
la source
que fait la fonction formatDate4db? Pourquoi remplacer les tirets par des barres obliques dans la chaîne?
braindigitalis
La fonction formatDate4db passe la date et crée un format comme le format de base de données mysql et la fonction str_replace, j'ai le format de date 2019/12/10 et le remplace par -
Muhammad Awais Zulifqar
-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Où 86400 est le nombre de secondes dans une journée.

Jason
la source
11
Non, un jour n'a pas toujours 86400 secondes.
nickb
Je ne comprends pas le problème. Veuillez expliquer @nickb
Aiyion.Prime
@ Aiyion.Prime jours qui font le passage à l'heure d'été ou à partir de l'heure d'été n'ont pas 86400 secondes
dumazy
J'y ai pensé, l'heure d'été est lancée à deux heures et ne devrait donc jamais aboutir à une date différente?
Aiyion.Prime
Le problème n'est pas l'heure d'été. Les heures dans une base de données doivent vraiment être stockées au format UTC qui n'a pas d'heure d'été. Si vous stockez vos dates en UTC, cela fonctionnera bien mais est un peu obtus.
braindigitalis