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