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?

ian
la source

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);
RaYell
la source
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');
John Conde
la source
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
Dmitry
la source
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é.

nickf
la source
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');
Omar
la source
1

Je suggère de commencer à utiliser les classes Zend_Date de Zend Framework . Je sais, c'est un peu hors sujet, mais j'aimerais bien :-)

$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();
Pawka
la source
pouvez-vous s'il vous plaît voir mon (quesiton) [ stackoverflow.com/q/61421783/8919244] associé ?
Moeez
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)));
user3216114
la source
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.

Niroshan
la source
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 .

Vadim Samokhin
la source