(转)[Laravel]更改日期格式适应DB

转自: https://blog.csdn.net/aboutmn/article/details/103289659

想象一下,您的网站上有一些带有日期选择器的日期输入字段。 在交付完整的项目后,客户会返回请求:“顺便说一下,日期格式应为m / d / y”。 各种形式都有很大的变化,是吗?

那么如何在项目一开始就防止这种情况呢? 如何使数据库,日期选择器和所有视图中的日期格式都易于配置?

最大的问题是日期格式在三个地方处理:

  • 数据库应始终为YYYY-MM-DD;
  • Laravel后端:在表单/视图中,我们应该具有客户端想要的任何格式,但是在保存到数据库时应将其转换为YYYY-MM-DD;
  • JavaScript datepicker:日期的JS格式与PHP格式不同,我们将在下面的示例中看到。
  •  

那么,如何同步所有这些呢?
首先,让它全部正常运行,然后让它可配置。

JavaScript Datepicker Format

在此示例文章中,我们将以Bootstrap Datepicker为例。
为了使其工作,我们需要以下代码部分:

<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />

...

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>

<script>
$(document).ready(function () {
  $('.date').datetimepicker({
    format: 'MM/DD/YYYY',
    locale: 'en'
  });
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

如您所见,我们传递的格式为MM / DD / YYYY,在PHP Date格式中,该格式为m / d / Y。

结果是这样的:
在这里插入图片描述

将日期保存到数据库

如果我们将表单数据过帐到某个Controller,则会获得与datepicker完全相同的日期。 而且,如果尝试将其以m / d / Y的形式直接保存到数据库中,则会收到SQL错误。

因此,我们需要将其转换为正确的格式。 我们可以在几个地方做到这一点。

选项1. TransactionController store()方法:

public function store(Request $request)
{
    $data = $request->all();
    $data['transaction_date'] = Carbon::createFromFormat('m/d/Y', $request->transaction_date)->format('Y-m-d');
    $transaction = Transaction::create($data);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这种方法的问题是,您必须在update()方法中执行相同的操作,并且需要在任何地方存储该数据。 这是更灵活的方法。

选项2. Model Mutator app / Transaction.php:

public function setTransactionDateAttribute($value)
{
    $this->attributes['transaction_date'] = Carbon::createFromFormat('m/d/Y', $value)->format('Y-m-d');
}
  • 1
  • 2
  • 3
  • 4

在表单/视图中显示日期

好的,我们以Y-m-d格式将日期保存在数据库中。 但是对于用户而言,从视觉上看,它始终应该是m / d / Y。 因此,类似于上面的示例,我们需要在Model上创建访问器。
app/Transaction.php:

public function getTransactionDateAttribute($value)
{
    return Carbon::parse($value)->format('m/d/Y');
}

使其可配置

对于以上所有示例,我们需要使用config中的值替换确切的格式。
因此,我们将这些变量添加到config/app.php中:

return [
  'date_format' => 'm/d/Y',
  'date_format_javascript' => 'MM/DD/YYYY',
];
  • 然后,在Laravel中,我们可以使用以下代码:
Carbon::createFromFormat(config('app.date_format'), $value)->format('Y-m-d');
Carbon::parse($value)->format(config('app.date_format'));

最后,我们无法在JavaScript中插入变量,但是可以在Blade文件中添加该脚本命令,然后执行以下操作:

  $('.date').datetimepicker({
    format: '{{ config('app.date_format_javascript') }}',
    locale: 'en'
  });

现在,作为一个完整的结果,如果我们需要在所有项目中更改日期格式,我们要做的就是更改config/app.php文件中的变量。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值