¿Cómo comparar dos marcas de tiempo de carbono?

83

Tengo dos marcas de tiempo, edited_at que creé y created_at (Laravel's) ... En la base de datos, ambas tienen marca de tiempo de tipo y valor predeterminado 0000-00-00 00:00:00 ...

var_dump(edited_at variable)está dando cuerda. Mientras var_dump(created_at variable)sea ​​objeto / Carbono. ¿Qué hay de malo en estas marcas de tiempo?

Tengo que comparar ambos después de convertirlos en números enteros usando el formato ('U'). Solo puedo llamar a este método en Carbon Object. ¿Cómo puedo hacer eso?

Hassan Saqib
fuente
¿Qué quieres comparar exactamente? ¿quieres saber cuál es más antiguo o más nuevo?
lukasgeiter
sí, quiero hacer campaña más viejo / más nuevo
Hassan Saqib

Respuestas:

189

Primero, Eloquent convierte automáticamente sus marcas de tiempo ( created_at, updated_at) en objetos de carbono. Puede usar updated_atpara obtener esa buena característica o especificar edited_aten su modelo en la $datespropiedad:

protected $dates = ['edited_at'];

Ahora volvamos a tu pregunta real. Carbon tiene un montón de funciones de comparación:

  • eq() es igual a
  • ne() no es igual
  • gt() mas grande que
  • gte() mayor o igual que
  • lt() menos que
  • lte() menor o igual que

Uso:

if($model->edited_at->gt($model->created_at)){
    // edited at is newer than created at
}
lukasgeiter
fuente
2
¿Cómo puedo comparar solo las fechas y no la hora?
geckob
3
@geckob Lo más fácil es probablemente hacerlo$date1->toDateString() == $date2->toDateString()
lukasgeiter
Estoy probando y es posible usar los operadores de comparación para comparar objetos de carbono. ¿Es una característica nueva?
JCarlosR
Al usar esto, recuerde manejar las marcas de tiempo que aceptan valores NULL. Laravel simplemente convertirá el SQL nullen PHP en nulllugar de un objeto Carbon, y obtendrás call to a member function lt() on null.
okdewit
se debe utilizar $ some_cabron_date-> endOfDay () o $ some_cabron_date-> startOfDay () con el que las funciones de la operación deseada
Williaan Lopes
21

Carbon tiene un montón de funciones de comparación con nombres nemotécnicos :

  • igual a()
  • no igual a()
  • mas grande que()
  • Mayor qué o igual a()
  • menos que()
  • Menos que o igual a()

Uso:

 if($model->edited_at->greaterThan($model->created_at)){
     // edited at is newer than created at
 }

Válido para nesbot / carbon 1.36.2

Si no está seguro de en qué versión de Carbon se encuentra, ejecute este

$composer show "nesbot/carbon"

documentación: https://carbon.nesbot.com/docs/#api-comparison

Yevgeniy Afanasyev
fuente
3

Primero, convierta la marca de tiempo utilizando la funcionalidad elocuente incorporada, como se describe en esta respuesta .

Entonces puede usar la función min()o de Carbon max()para comparar. Por ejemplo:

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0); $dt2 = Carbon::create(2014, 1, 30, 0, 0, 0); echo $dt1->min($dt2);

Esta será echola menor de las dos fechas, que en este caso es $dt1.

Ver http://carbon.nesbot.com/docs/

ginna
fuente
1

Así es como comparo 2 fechas, ahora () y una fecha de la tabla

@if (\Carbon\Carbon::now()->lte($item->client->event_date_from))
    .....
    .....
@endif

Debería funcionar bien. He utilizado las funciones de comparación proporcionadas por Carbon.

hackernewbie
fuente