You need to enable JavaScript to run this app. Laravel8 Jetstream Inertia API令牌页DateTime解析错误如何处理?
优惠活动
大模型
产品
解决方案
定价
更多

Laravel8 Jetstream Inertia API令牌页DateTime解析错误如何处理?

报错原因

该问题由PostgreSQL timestamp类型字段返回格式与Laravel Jetstream默认的Carbon日期解析规则不匹配导致:

  • Jetstream存储API Token的expires_at、created_at等字段为timestamp类型,PostgreSQL读取该类型字段时,默认返回EEE dd MMM HH:mm:ss yyyy格式的字符串(即报错中的Thu 24 Jun 16:46:15 2021格式)
  • Laravel默认的日期解析规则未兼容该格式,Carbon尝试解析时就会抛出格式不匹配异常。

修复方法

任选以下一种方案即可:

方案1:自定义Sanctum Token模型的日期格式(推荐)

  1. 复制vendor/laravel/sanctum/src/PersonalAccessToken.php文件到app/Models/PersonalAccessToken.php路径
  2. 在app/Providers/AuthServiceProvider.php中注册自定义的Token模型:
use App\Models\PersonalAccessToken;
use Laravel\Sanctum\Sanctum;

public function boot()
{
    $this->registerPolicies();
    Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
  1. 在自定义的PersonalAccessToken.php模型中添加兼容PostgreSQL日期格式的配置:
protected $dateFormat = 'D d M H:i:s Y';

方案2:修改PostgreSQL连接的日期输出格式

在config/database.php的pgsql连接配置中添加初始化语句,修改当前会话的日期输出规则:

'pgsql' => [
    'driver' => 'pgsql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'schema' => 'public',
    'sslmode' => 'prefer',
    // 新增下面的options配置
    'options' => [
        PDO::ATTR_EMULATE_PREPARES => true,
        PDO::PGSQL_ATTR_INIT_COMMAND => 'SET datestyle = "ISO, YMD"'
    ],
],

修改完成后执行php artisan config:clear清除配置缓存即可生效。

内容的提问来源于stack exchange,提问作者Diego Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 03:15:08