2012-06-27 26 views
9

Tengo un código donde tengo que "redondear" al minuto más bajo.Php: DateTime: cómo establecer solo segundos (no horas ni minutos)

  • 16:05:00 debe convertirse en 16:05:00
  • 16:05:01 debe convertirse en 16:05:00
  • 16:05:29 debe convertirse en 16:05:00
  • 16:05:30 debe convertirse en 16:05:00
  • 16:05:31 debe convertirse en 16:05:00
  • 16:05:59 debe convertirse en 16:05:00

Quiero utilizar el objeto DateTime. No hay funciones tales como:

  • setHours()
  • setMinutes()
  • setSeconds()

Aquí está el comienzo de mi código:

$my_date=DateTime::createFromFormat(
    'Y-m-d H:i:s', 
    $bd_date 
); 
$my_date->setTimezone(self::$TimeZone); 

Ahora me gustaría establecer la parte de "segundos" a cero.

¿Tiene una forma elegante de configurar los minutos como a mí me gustaría?

Nota: No estoy buscando una solución como "divide by getTime() por 60, convierte a entero, luego multiplica por 60". Estoy buscando una solución genérica para establecer los segundos, no solo a "0".

Respuesta

20

¿Es setTime elegant?

$my_date->setTime ($my_date->format("H"), $my_date->format("i"), $new_second_val); 
$my_date->setTime ($my_date->format("H"), $new_minute_val, $new_second_val); 
// etc... 
+0

solución perfecta;) –

+0

... y suena muy eficiente;) – Chuck

+0

es la forma más eficiente para ajustar las horas y minutos en un DateTime objeto. Además, 'format' es la única forma documentada de extraer horas de DateTime. – wroniasty

6

Sólo hay que establecer los segundos a "00"

date_default_timezone_set('America/Sao_paulo'); 
$date = new DateTime(); 
echo $date->format('Y-m-d H:i:00'); 
+0

Lo intenté pero no funciona ... devuelve falso en lugar de un objeto. –

+0

Esto no funciona, si usa createFromFormat(), ya que el valor dado es 2017-02-15 15:10:20. Así que los segundos no se analizan y no hacen que la función devuelva un objeto DateTime –

+0

Acabo de probar con createFromFormat() y funcionó –

Cuestiones relacionadas