Avoir un cauchemar en ce moment et je ne vois pas pourquoi ça ne marche pas
J'ai une valeur sous la forme H: i (c'est-à-dire 10h00, 13h30), etc. appelée $ time
Ce que je veux faire, c'est créer deux nouvelles valeurs: $ startTime, 30 minutes avant $ time et $ endTime, 30 minutes après $ time
J'ai essayé ce qui suit, mais je ne semble pas vouloir travailler.
$startTime = date("H:i",strtotime('-30 minutes',$time));
$endTime = date("H:i",strtotime('+30 minutes',$time));
Si je passe à 10:00 en tant que $ time et que je répète en écho $ startTime et $ endTime, je reçois:
$startTime = 00:30
$startTime = 01:30
$time = strtotime('10:00');
$startTime = date("H:i", strtotime('-30 minutes', $time));
$endTime = date("H:i", strtotime('+30 minutes', $time));
Pour que cela fonctionne, $time
doit être un horodatage. Vous ne pouvez pas entrer "10:00" ou quelque chose comme $time = date('H:i', '10:00');
, ce que vous semblez faire, car j'obtiens 0:30 et 1:30 comme résultat également.
Essayer
$time = strtotime('10:00');
En guise d'alternative, envisagez d'utiliser DateTime ( le texte ci-dessous nécessite PHP 5.3 si ):
$dt = DateTime::createFromFormat('H:i', '10:00'); // create today 10 o'clock
$dt->sub(new DateInterval('PT30M')); // substract 30 minutes
echo $dt->format('H:i'); // echo modified time
$dt->add(new DateInterval('PT1H')); // add 1 hour
echo $dt->format('H:i'); // echo modified time
ou procédurale si vous n'aimez pas la POO
$dateTime = date_create_from_format('H:i', '10:00');
date_sub($dateTime, date_interval_create_from_date_string('30 minutes'));
echo date_format($dateTime, 'H:i');
date_add($dateTime, date_interval_create_from_date_string('1 hour'));
echo date_format($dateTime, 'H:i');
Je prends généralement une tactique légèrement différente:
$startTime = date("H:i",time() - 1800);
$endTime = date("H:i",time() + 1800);
Où 1800 secondes = 30 minutes.
Votre solution actuelle ne fonctionne pas car $time
est une chaîne - il doit s'agir d'un horodatage Unix. Vous pouvez le faire à la place:
$unix_time = strtotime('January 1 2010 '.$time); // create a unix timestamp
$startTime date( "H:i", strtotime('-30 minutes', $unix_time) );
$endTime date( "H:i", strtotime('+30 minutes', $unix_time) );
$time = 30 * 60; //30 minutes
$start_time = date('Y-m-d h:i:s', time() - $time);
$end_time = date('Y-m-d h:i:s', time() + $time);
Juste pour développer les réponses précédentes, une fonction permettant de faire ceci pourrait fonctionner comme ceci (changer les formats d'heure et d'intervalle comme vous les aimez selon this pour function.date , et this pour DateInterval ):
// Return adjusted start and end times as an array.
function expandTimeByMinutes( $time, $beforeMinutes, $afterMinutes ) {
$time = DateTime::createFromFormat( 'H:i', $time );
$time->sub( new DateInterval( 'PT' . ( (integer) $beforeMinutes ) . 'M' ) );
$startTime = $time->format( 'H:i' );
$time->add( new DateInterval( 'PT' . ( (integer) $beforeMinutes + (integer) $afterMinutes ) . 'M' ) );
$endTime = $time->format( 'H:i' );
return [
'startTime' => $startTime,
'endTime' => $endTime,
];
}
$adjustedStartEndTime = expandTimeByMinutes( '10:00', 30, 30 );
echo '<h1>Adjusted Start Time: ' . $adjustedStartEndTime['startTime'] . '</h1>' . PHP_EOL . PHP_EOL;
echo '<h1>Adjusted End Time: ' . $adjustedStartEndTime['endTime'] . '</h1>' . PHP_EOL . PHP_EOL;
echo date( "Y-m-d H:i:s", strtotime("2016-10-10 15:00:00")+(60*30) );//2016-10-10 15:30:00
ou
echo date( "H:i:s", strtotime("15:00:00")+(60*30) ); // 15:30:00
ou
echo date( "H:i:s", strtotime(date("H:i:s"))+(60*30) ); // 15:30:00