【问题标题】:Laravel Carbon formatting errorLaravel Carbon 格式错误
【发布时间】:2018-06-27 10:44:56
【问题描述】:

我遇到了一个奇怪的问题。

我正在使用 Carbon 进行约会。我想使用正常工作的 Y-W(年、周)格式。 这里我将它存储到数据库中:

$weekDate = Carbon::createFromFormat('d-m-y', "{$key}")->format('Y-W');

DB::table('backorder_voorspelling')->insert([
    'artikelcode' => $articlecode,
    'week' => $weekDate,
    'aantal' => $value,
    'created_at' => Carbon::now(),
    'updated_at' => Carbon::now()
]);

数据库记录正确:

{#426 ▼
  +"id": 1
  +"artikelcode": "articlecode"
  +"week": "2017-44"
  +"aantal": "6"
  +"created_at": "2018-01-18 11:46:45"
  +"updated_at": "2018-01-18 11:46:45"
}

稍后我想将 Y-W 转换回碳时间,这告诉我:

我用来创建碳时间的代码:

$startOfWeek = Carbon::createFromFormat('Y-W', $row->week);

格式相同,存储时我使用格式('Y-W'),而创建FromFormat时我使用格式('Y-W'),但它不起作用......

我尝试将 - 替换为 / 但这会返回相同的错误。

感谢任何帮助。

【问题讨论】:

    标签: php laravel datetime php-carbon


    【解决方案1】:

    并非所有日期格式字符都可以在DateTime::createFromFormat 中使用(这是 Carbon 扩展的内容)。不幸的是,W 是其中之一。

    来自the manual

    传入的字符串应采用的格式。请参阅下面的格式选项。在大多数情况下,可以使用与 date() 相同的字母。

    您可以通过在新的 DateTime(或 Carbon)实例上手动调用 setISODate 来解决此问题:

    list ($year, $week) = explode('-', '2017-44');
    $d = new DateTime;
    $d->setISODate($year, $week);
    

    setISODate 还接受第三个 $day 参数 - 默认情况下,它将设置为一周的第一天,我认为这是您想要的。

    https://eval.in/937360

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 2018-04-20
      • 2018-01-10
      • 2016-02-28
      • 2021-11-30
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多