Laravel 收银员 DateTime::__construct():无法解析位置 0 (@) 的时间字符串 (@):

Laravel Cashier DateTime::__construct(): Failed to parse time string (@) at position 0 (@):

我在显示发票列表时有这段代码,这与 Laravel 出纳员官方文档中的代码相似或完全相同。我收到了这个奇怪的 DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character 错误,我不确定 @ 字符在替换应该的日期时做了什么。

@foreach (Auth::user()->invoices() as $invoice)
    <tr>
        <td>{{ $invoice->date()->toFormattedDateString() }}</td>
        <td>{{ $invoice->total() }}</td>
        <td>
            <a href="/user/invoice/{{ $invoice->id }}">Download</a>
        </td>
    </tr>
@endforeach

有没有人有类似的经历?我也尝试在控制器中只 var_dump 每个 $invoice->date() 但错误仍然相同。

您似乎没有使用最新版本的 Laravel Cashier。在旧版本中,如果您按照代码进行操作,您会看到 Laravel Cashier 正在尝试格式化 属性 而 Stripe 不再 returns.

cashier\src\Invoice.php,第 48 行

$carbon = Carbon::createFromTimestampUTC($this->invoice->date);

根据 Stripe "API Upgrade Guide",您可以在 2019-03-14 看到,他们宣布了以下更改;

"The date property has been renamed to created."(来源:https://stripe.com/docs/upgrades#2019-03-14

最新版本的 Cashier 通过首先检查 created 属性 是否存在解决了这个问题。

https://github.com/laravel/cashier/blob/9.0/src/Invoice.php#L48

编辑:如果您出于任何原因无法升级,而不是:

$invoice->date()->toFormattedDateString()

您可以尝试类似的方法:

Carbon::createFromTimestamp($invoice->asStripeInvoice()->created)->toFormattedDateString();

最近我遇到了同样的错误。标签上的日期是 null.

我正在阅读 Stripe's docs,自 2019 年 3 月 14 日起,他们进行了一些更改。

Laravel Cashier 将停止获取发票日期,因为 Stripe 将不再提供它。

There are a few changes to the invoice object:

  • status_transitions 散列现在包含发票时的时间戳 已完成、已付款、标记为不可回收或作废。
  • date 属性 已重命名为 created。
  • finalized_at 属性 已移入 status_transitions 散列。

现在,我是怎么解决的?

  1. 我在 composer.json 文件中将 Laravel 出纳员的版本更改为 9.3
  2. 我打开了我的终端 运行 composer update

希望我的解决方案对您有用。问候!