Laravel date_format字段验证向后吗?

时间:2018-10-07 00:27:27

标签: php mysql laravel

我正在尝试确定问题出在哪里。我正在输入类似“ 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;

3 个答案:

答案 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'
];