Estoy tratando de tomar un objeto de fecha que sale de mi CMS de Drupal, restar un día e imprimir ambas fechas. Esto es lo que tengo
$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
Así que no entiendo por qué el objeto de fecha original está saliendo bien, pero luego estoy tratando de crear un objeto de fecha adicional y modificarlo restando un día y parece que no puedo hacer eso. La salida siempre sale en blanco.
php
datetimeoffset
td-dev
fuente
fuente
$date_raw = date("r");
DateTime
( ver aquí ).date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));
fuente
$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");
El uso de DateTime ha reducido significativamente la cantidad de dolores de cabeza que se sufren al manipular las fechas.
fuente
date_create
es el método de procedimiento para invocar elDateTime
constructor , que le permite reducir sus 3 líneas en 1 sin usarnew
. Es decirecho date_create('2017-05-18')->modify('-1 day')->format('Y-m-d H:i:s');
(new \DateTime("2017-05-18"))->modify("-1 day")->format("Y-m-d H:i:s")
Versión orientada a objetos
$dateObject = new DateTime( $date_raw ); print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');
fuente
Una opción de una sola línea es:
echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');
Ejecutarlo en el Editor PHP en línea .
alternativa mktime
Si prefiere evitar el uso de métodos de cadena, o entrar en cálculos, o incluso crear variables adicionales, mktime admite restas y valores negativos de la siguiente manera:
// 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
Editor PHP en línea
fuente
No estoy seguro de por qué su código actual no funciona, pero si no necesita específicamente un objeto de fecha, esto funcionará:
$first_date = strtotime($date_raw); $second_date = strtotime('-1 day', $first_date); print 'First Date ' . date('Y-m-d', $first_date); print 'Next Date ' . date('Y-m-d', $second_date);
fuente
Answear tomado de los comentarios de la función strtotime manual de Php:
echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));
O
$date = "2009-01-31"; echo date( "Y-m-d", strtotime( $date . "-1 day"));
fuente
¿Qué tal esto? Conviértalo primero a una marca de tiempo Unix, reste 60 * 60 * 24 (exactamente un día en segundos) y luego tome la fecha de eso.
$newDate = strtotime($date_raw) - 60*60*24; echo date('Y-m-d',$newDate);
Nota: como ha señalado apokryfos, esto técnicamente se desviaría por los cambios de horario de verano donde habría un día con 25 o 23 horas
fuente
Tan simple como eso:
date("Y-m-d", strtotime("-1 day"));
date("Y-m-d", strtotime("-1 months"))
fuente
Cómo agregar 1 año a una fecha y luego restarle 1 día en asp.net c #
Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);
fuente