fix: update biometric sync timezone parsing to Asia/Manila and correct historical records

This commit is contained in:
2026-05-30 11:13:45 +08:00
parent 680bea2fc2
commit e89b8e0ccf
2 changed files with 36 additions and 6 deletions

View File

@@ -81,9 +81,6 @@ class AttendanceSyncController extends Controller
]);
}
/**
* Safely parse various date formats coming from ZKTeco devices or JS agents.
*/
private function parseDateSafe($dateStr)
{
if (!$dateStr) {
@@ -94,16 +91,16 @@ class AttendanceSyncController extends Controller
if (is_numeric($dateStr)) {
if (strlen((string)$dateStr) > 10) {
// It's likely in milliseconds
return \Carbon\Carbon::createFromTimestampMs($dateStr);
return \Carbon\Carbon::createFromTimestampMs($dateStr)->setTimezone('Asia/Manila');
}
return \Carbon\Carbon::createFromTimestamp($dateStr);
return \Carbon\Carbon::createFromTimestamp($dateStr)->setTimezone('Asia/Manila');
}
// Remove JS-specific timezone names like "(China Standard Time)" to prevent Carbon parse errors
$cleanDateStr = trim(explode('(', $dateStr)[0]);
try {
return \Carbon\Carbon::parse($cleanDateStr);
return \Carbon\Carbon::parse($cleanDateStr, 'Asia/Manila')->setTimezone('Asia/Manila');
} catch (\Exception $e) {
return null;
}