我遇到了一个奇怪的问题。
我正在使用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转换回碳排放时间,这告诉我:
我用来创建碳时间的代码:
$startOfWeek = Carbon::createFromFormat('Y-W', $row->week);
格式是相同的,当存储我使用格式('Y-W')时和创建格式时我使用格式('Y-W'),但它不起作用...
我尝试替换 - for /但这会返回相同的错误。
感谢任何帮助。
答案 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
参数 - 默认设置为一周的第一天,我认为这就是你想要的。