¿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?


¿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
}

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


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/


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.