diff --git a/app/RSpade/Core/Time/Rsx_DateTime_Cast.php b/app/RSpade/Core/Time/Rsx_DateTime_Cast.php index dd1f3a025..9ec079160 100644 --- a/app/RSpade/Core/Time/Rsx_DateTime_Cast.php +++ b/app/RSpade/Core/Time/Rsx_DateTime_Cast.php @@ -46,11 +46,15 @@ class Rsx_DateTime_Cast implements CastsAttributes // MySQL format "YYYY-MM-DD HH:MM:SS" - convert to ISO if (is_string($value) && preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $value)) { // Database stores in UTC, parse as UTC - $carbon = Carbon::createFromFormat( - strlen($value) > 19 ? 'Y-m-d H:i:s.v' : 'Y-m-d H:i:s', - $value, - 'UTC' - ); + // Handle fractional seconds: truncate to 3 digits for .v format (milliseconds) + // This handles microseconds (6 digits) from Laravel/Carbon after save() + if (strlen($value) > 19) { + $value = preg_replace('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\.(\d{3})\d*/', '$1.$2', $value); + $format = 'Y-m-d H:i:s.v'; + } else { + $format = 'Y-m-d H:i:s'; + } + $carbon = Carbon::createFromFormat($format, $value, 'UTC'); return $carbon->format('Y-m-d\TH:i:s.v\Z'); }