laravel日期\格式字段验证?

nbnkbykc  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(781)

我在想问题出在哪里。我要输入“01-02-2018”来指2018年1月2日。然后创建一个变量,将其固定为mysql的标准2018-01-02日期格式并保存。但是,当它保存时,它将其保存为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;
fcg9iug3

fcg9iug31#

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
ou6hu8tu

ou6hu8tu2#

实现这一点的“laravelish”方法是使用内置的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-突变子):
Prescription 型号等级:

protected $dates = [
    'created_at',
    'updated_at',
    'prescribe_date'
];
myss37ts

myss37ts3#

你可以试试这个。

$prescribe_dateFix = date_format($request->prescribe_date, 'Y-m-d')

相关问题