【问题标题】:Laravel - Carbon ->addmonth() giving random dates?Laravel - Carbon ->addmonth() 给出随机日期?
【发布时间】:2016-08-21 06:19:50
【问题描述】:

我们在使用“Mollie”为付款创建 webhook 服务时遇到问题。

这是 webhook 代码

 public function premiumPaymentCheck(Request $request)
    {
        $payment = Mollie::api()->payments()->get(Input::get('id'));
        $metadata = $payment->metadata;
        $user_id = $metadata->user_id;


        if ($payment->isPaid()) {

            $user = User::find($user_id);

            $user->mollie_customerID = $metadata->customerId;
            $user->premium = true;
            $user->premium_type = "premium";
            $user->subscribed = true;
            $user->premium_expire_date = Carbon::now()->addMonth();

            $user->save();
        }
    }

一切正常,除了premium_expire_date。据我了解,它应该从付款时间增加 1 个月(付款调用 webhook 的时间,所以 Carbon::now()),但日期永远不会匹配。它总是一个随机日期这真的没有意义。

有些日期是正确的,但大多数似乎完全正确。知道这可能是什么吗?

【问题讨论】:

  • 还有多远?它们是否一致(即连续运行多个Carbon::now()->addMonth() 调用是否会给出相似或完全不同的日期)? premium_expire_date 字段的列类型是什么? Carbon::now() 为您输出了什么 - 那部分准确吗?
  • 不,它们都在所需日期的一个月内,但确实没有任何规律
  • 你只回答了我的一个问题。通过 CLI,运行 php artisan tinker 并输入 Carbon\Carbon::now()->addMonth(); 它是否满足您的期望?
  • 如果您在接近月底时遇到问题(例如Carbon::now() '2016-07-30'),请注意月份溢出行为和Carbon::addMonthNoOverflow(参见why addMonths() change the day of month? 中的示例)跨度>

标签: php laravel date php-carbon


【解决方案1】:

碳没有问题。检查您的 config/app.php 文件的时区属性。

'timezone' => env('APP_TIMEZONE', 'UTC'),

【讨论】:

  • 时区问题不会导致所描述的“随机日期”。
【解决方案2】:

时区目前是:

'timezone' => 'UTC',

我们在比利时/布鲁塞尔。应该是这样的:

'timezone' => env('Europe/Brussels', 'UTC')

也可以是:

'timezone' => 'Europe/Brussels',

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 2018-07-04
    • 2016-04-30
    • 2018-03-31
    • 2018-08-23
    • 2019-11-06
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多