BF caster

This commit is contained in:
Fabian @ Blax Software 2025-12-17 17:01:01 +01:00
parent 7da5eb9f72
commit f0a9441615
1 changed files with 10 additions and 10 deletions

View File

@ -8,8 +8,8 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Cast for datetime fields that: * Cast for datetime fields that:
* - Accepts string, DateTimeInterface, or Carbon as input * - Accepts string, DateTimeInterface, Carbon, or Unix timestamp as input
* - Stores as Unix timestamp in database (integer) * - Stores as datetime string in database (for timestamp columns)
* - Returns Carbon instance on get * - Returns Carbon instance on get
* *
* Usage for HTML5 datetime-local inputs: * Usage for HTML5 datetime-local inputs:
@ -28,8 +28,8 @@ class HtmlDateTimeCast implements CastsAttributes
return null; return null;
} }
// Convert timestamp to Carbon // Handle datetime strings from database
return Carbon::createFromTimestamp($value); return Carbon::parse($value);
} }
/** /**
@ -37,7 +37,7 @@ class HtmlDateTimeCast implements CastsAttributes
* *
* @param array<string, mixed> $attributes * @param array<string, mixed> $attributes
*/ */
public function set(Model $model, string $key, mixed $value, array $attributes): ?int public function set(Model $model, string $key, mixed $value, array $attributes): ?string
{ {
if ($value === null) { if ($value === null) {
return null; return null;
@ -45,22 +45,22 @@ class HtmlDateTimeCast implements CastsAttributes
// Handle Carbon instances // Handle Carbon instances
if ($value instanceof Carbon) { if ($value instanceof Carbon) {
return $value->timestamp; return $value->format('Y-m-d H:i:s');
} }
// Handle DateTimeInterface // Handle DateTimeInterface
if ($value instanceof \DateTimeInterface) { if ($value instanceof \DateTimeInterface) {
return Carbon::instance($value)->timestamp; return Carbon::instance($value)->format('Y-m-d H:i:s');
} }
// Handle string input (including HTML5 datetime-local format) // Handle string input (including HTML5 datetime-local format)
if (is_string($value)) { if (is_string($value)) {
return Carbon::parse($value)->timestamp; return Carbon::parse($value)->format('Y-m-d H:i:s');
} }
// Handle numeric timestamp // Handle numeric timestamp (Unix timestamp)
if (is_numeric($value)) { if (is_numeric($value)) {
return (int) $value; return Carbon::createFromTimestamp($value)->format('Y-m-d H:i:s');
} }
throw new \InvalidArgumentException( throw new \InvalidArgumentException(