Laravel Carbon格式化错误

时间:2018-01-18 11:15:14

标签: php laravel datetime php-carbon

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

我正在使用Carbon作为日期。我想使用正常工作的格式Y-W(年,周)。 在这里,我将它存储在DB中:

$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转换回碳排放时间,这告诉我:

enter image description here

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

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

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

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

感谢任何帮助。

1 个答案:

答案 0 :(得分: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