122 votes

Soustraire 1 jour avec PHP

J'essaie de prendre un objet date qui sort de mon CMS Drupal, de soustraire un jour et d'imprimer les deux dates. Voici ce que j'ai

$date_raw = $messagenode->field_message_date[0]['value'];

print($date_raw);

//this gives me the following string: 2011-04-24T00:00:00

$date_object = date_create($date_raw);

$next_date_object = date_modify($date_object,'-1 day');

print('First Date ' . date_format($date_object,'Y-m-d'));

//this gives me the correctly formatted string '2011-04-24'

print('Next Date ' . date_format($next_date_object,'Y-m-d'));

//this gives me nothing. The output here is always blank

Je ne comprends pas pourquoi l'objet date d'origine s'affiche correctement, mais que j'essaie ensuite de créer un objet date supplémentaire et de le modifier en soustrayant un jour, ce qui semble impossible. Le résultat est toujours vide.

182voto

MasterCassim Points 4525

Vous pouvez essayer :

print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));

79voto

aberdat Points 431
$date = new DateTime("2017-05-18"); // For today/now, don't pass an arg.
$date->modify("-1 day");
echo $date->format("Y-m-d H:i:s");

L'utilisation de DateTime a considérablement réduit le nombre de maux de tête endurés lors de la manipulation des dates.

68voto

iThink Points 510
 date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));

31voto

Armfoot Points 101

A Une seule phrase l'option est :

echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');

Le faire fonctionner sur Éditeur PHP en ligne .


mktime alternative

Si vous préférez éviter d'utiliser des méthodes de type chaîne de caractères, d'entrer dans des calculs, ou même de créer des variables supplémentaires, mktime prend en charge la soustraction et les valeurs négatives de la manière suivante :

// Today's date
echo date('Y-m-d'); // 2016-03-22

// Yesterday's date
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); // 2016-03-21

// 42 days ago
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-42, date("Y"))); // 2016-02-09

//Using a previous date object
$date_object = new DateTime('2011-04-24');
echo date('Y-m-d',
  mktime(0, 0, 0,
     $date_object->format("m"),
     $date_object->format("d")-1,
     $date_object->format("Y")
    )
); // 2011-04-23

Éditeur PHP en ligne

29voto

Cosmitar Points 111

Version orientée objet

$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X