ajout d'un jour à une valeur de format DATETIME


87

Dans certaines situations, je souhaite ajouter 1 jour à la valeur de ma variable au format DATETIME:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

Quelle est la meilleure façon de procéder?

Réponses:


63

Si vous voulez faire cela en PHP:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

Si vous souhaitez ajouter la date dans MySQL:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

cela ne me donnera-t-il pas l'heure actuelle? J'ai toujours besoin de garder mon temps saisi par l'utilisateur.
ian

Oui, mais je vous ai indiqué quelles valeurs vous devriez changer pour l'heure personnalisée. Vous pouvez simplement remplacer time()par strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

ce n'est pas une économie d'été / d'hiver! Veuillez utiliser la manipulation de la date / heure de sauvegarde de l'heure d'été
steven

208

Il y a plus d'une façon de faire cela avec DateTime qui a été introduit dans PHP 5.2. Contrairement à l'utilisation, strtotime()cela tiendra compte de l'heure d'été et de l'année bissextile.

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

// Available in PHP 5.3

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

// Available in PHP 5.4

echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');

// Available in PHP 5.5

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

Ah, une boucle de boucle .
Funk Forty Niner

9
Si vous ajoutez plus d'un jour, vous pouvez utiliser le pluriel ou le singulier et obtenir le même résultat, par exemple: +2 dayou +2 days( +2 daysest évidemment plus sémantiquement correct)
timhc22

Quelles sont les différences pratiques entre ces méthodes? Le premier exemple me semble le plus simple et le plus sémantique.
BadHorsie

24

Le constructeur DateTime prend un paramètre string time. $timepeut être des choses différentes, il doit respecter le format datetime .

Il existe quelques valeurs valides comme exemples:

  • 'now' (la valeur par défaut)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Donc, dans votre cas, vous pouvez utiliser ce qui suit.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
Répondre sans explication? Lire Comment écrire une bonne réponse?
Shashanth

10
  1. Utilisez strtotimepour convertir la chaîne en un horodatage
  2. Ajoutez-y un jour (par exemple: en ajoutant 86400 secondes (24 * 60 * 60))

par exemple:

$time = strtotime($myInput);
$newTime = $time + 86400;

Si cela ne fait qu'ajouter 1 jour, utiliser à nouveau strtotime est probablement exagéré.


J'ai donc besoin de le convertir en TIMESTAMP puis de revenir au format DATETIME?
ian

4
Je suppose qu'il convient également de noter que chaque jour ne dure pas 24 heures. Dans la plupart des régions du monde, l'heure d'été (heure d'été) signifie qu'un jour par an ne dure que 23 heures et un autre jour, 25 heures.
nickf

UPS. Vous convertissez une date / heure en horodatage, donc elle est basée sur UTC. Et les jours UTC durent toujours 24h. Lors de la conversion, date()le fuseau horaire local est pris en compte, ce qui prendra en charge l'heure d'été.
rabudde

5

Vous pouvez utiliser

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

Vous pouvez utiliser comme suit.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

Vous pouvez également définir les jours comme constants et les utiliser comme ci-dessous.

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));

0

Utilisation du temps de demande du serveur pour ajouter des jours. Fonctionne comme prévu.

25/08/19 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

Ici '+2 jours' pour ajouter n'importe quel nombre de jours.


0

Il existe une manière plus concise et intuitive d'ajouter des jours à la date php. Ne vous méprenez pas, ces expressions php sont géniales, mais vous devez toujours rechercher sur Google comment les traiter. Je m'ennuie de l'installation d'auto-complétion pour cela.

Voici comment j'aime gérer ces cas:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

Pour moi, c'est beaucoup plus intuitif et la saisie semi-automatique fonctionne immédiatement. Pas besoin de chercher la solution sur Google à chaque fois.

En prime, vous n'avez pas à vous soucier du formatage de la valeur résultante, c'est déjà le format ISO8601.

Ceci est une bibliothèque de meringues, il y a plus d'exemples ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.