J'ai deux horodatages, edited_at que j'ai créé et created_at (Laravel's) ... Dans la base de données, les deux ont le type timestamp et la valeur par défaut 0000-00-00 00:00:00 ... Mais
var_dump(edited_at variable)
donne une chaîne. Alors que var_dump(created_at variable)
est objet/Carbon. Quel est le problème avec ces horodatages?
Je dois comparer les deux après la conversion en entier en utilisant le format ('U'). Je ne peux appeler cette méthode que sur Carbon Object. Comment puis je faire ça?
Tout d'abord, Eloquent convertit automatiquement ses horodatages (created_at
, updated_at
) En objets carbone. Vous pouvez simplement utiliser updated_at
Pour obtenir cette fonctionnalité Nice ou spécifier edited_at
Dans votre modèle dans la propriété $dates
:
protected $dates = ['edited_at'];
Revenons maintenant à votre question actuelle. Carbon a beaucoup de fonctions de comparaison:
eq()
est égal àne()
pas égalgt()
supérieur àgte()
supérieur ou égal àlt()
moins quelte()
inférieur ou égal àUsage:
if($model->edited_at->gt($model->created_at)){
// edited at is newer than created at
}
Carbon a un tas de fonctions de comparaison avec des noms mnémoniques:
Usage:
if($model->edited_at->greaterThan($model->created_at)){
// edited at is newer than created at
}
Valable pour nesbot/carbon 1.36.2
si vous ne savez pas quelle version de Carbon vous utilisez, lancez cette commande.
$composer show "nesbot/carbon"
Commencez par convertir l’horodatage en utilisant la fonctionnalité éloquente intégrée, comme décrit dans cette réponse .
Ensuite, vous pouvez simplement utiliser la fonction min()
ou max()
de Carbon pour la comparaison. Par exemple:
$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0); $dt2 = Carbon::create(2014, 1, 30, 0, 0, 0); echo $dt1->min($dt2);
Ceci sera echo
la moindre des deux dates, qui dans ce cas est $dt1
.
étendant sur @lukasgeiter answer, les méthodes eq()
, ne()
, gt()
, gte()
, lt()
, lte()
ne fait pas que comparer le day
mais il se penche également sur le time
et le timezone
>> $date->toArray();
{
"year": 2019,
"month": 2,
"day": 23,
"dayOfWeek": 6,
"dayOfYear": 53,
"hour": 7,
"minute": 39,
"second": 52,
"micro": 849616,
"timestamp": 1550907592,
"formatted": "2019-02-23 07:39:52",
"timezone": {
"timezone_type": 3,
"timezone": "UTC"
}
}
Le fuseau horaire peut être réglé comme suit: Carbon::parse($stringDate, new DateTimeZone('Asia/Dubai'))
pour ne comparer que le jour
$date1->startOfDay()->eq($date2->startOfDay())
je ne pouvais pas utiliser ces méthodes, j'espère que cela aidera quelqu'un d'autre.