我正在尝试确定问题出在哪里。我正在输入类似“ 01-02-2018”之类的内容来引用2018年1月2日。然后创建一个变量以将其固定为mySQL的标准2018-01-02 DATE格式,并保存它。但是,保存时,将其保存为2018-02-01,将月份和日期进行转置,代表2018年2月1日。这是我的代码:
验证
'prescribe_date' => 'nullable|date_format:"m-d-Y"|max:10',
修复
$prescribe_dateFix = date('Y-m-d', strtotime($request->prescribe_date));
保存
$prescription->prescribe_date = $prescribe_dateFix;
答案 0 :(得分:2)
strtotime
默认情况下会将您的日期解释为d-m-Y
,因此它会认为是2月1日。从手册中:
注意:
m / d / y或d-m-y格式的日期通过查看来消除歧义 各个组件之间的分隔符:如果分隔符是 斜线(/),则假定为美国m / d / y;而如果 分隔符是破折号(-)或点(。),然后是欧洲d-m-y格式 是假定的。
您需要改用date_create_from_format
:
$request = (object)['prescribe_date' => '01-02-2018'];
$prescribe_dateFix = date_create_from_format('m-d-Y', $request->prescribe_date)->format('Y-m-d');
echo $prescribe_dateFix;
输出:
2018-01-02
答案 1 :(得分:0)
您可以尝试一下。
$prescribe_dateFix = date_format($request->prescribe_date, 'Y-m-d')
答案 2 :(得分:0)
实现这一目标的“荒谬”方法是使用内置的Carbon库进行智能PHP日期操作:
// Perform validation and then...
$prescription->prescribe_date = Carbon::createFromFormat('m-d-Y', $request->prescribe_date);
$prescription->save();
当然,您还应该指定prescribe_date
字段是相应模型类中的日期(请参见https://laravel.com/docs/5.7/eloquent-mutators#date-mutators):
在Prescription
模型类中:
protected $dates = [
'created_at',
'updated_at',
'prescribe_date'
];