Laravel Carbon 格式化日期

3

我通过ajax从我的表单中发布一个日期,格式如下:

27/07/2016

当它到达我的控制器时,我将其格式转换为Y-m-d,因为它在我的数据库中存储的格式是这样的。

然而,我收到以下错误:

DateTime::__construct(): Failed to parse time string (27/07/2016) at position 0 (2): Unexpected character

我的控制器

public function call(Request $request)
    {              
        return Company->expenses()->where('date_expense', Carbon::parse($request->start)->format('Y-m-d'))->get();
    }

在我的费用模型中,我将以下内容定义为日期:
protected $dates = ['date_expense'];

你正在传递一个日期,但它需要一个时间戳,先将其转换为时间戳再传递。 - VikingBlooded
我该如何更改?抱歉@VikingBlooded - Dev.W
"Y-m-d H:i:s" 格式化函数 - VikingBlooded
尝试使用Carbon :: createFromFormat而不是Carbon :: parse - ceejayoz
3个回答

7

使用Carbon的Carbon::createFromFormat($format, $time, $tz);方法:

$start = Carbon::createFromFormat('d/m/Y', $request->start);

return Company->expenses()->where('date_expense', $start)->get();

顺便提一下,无需进一步格式化日期,因为Laravel知道如何处理Carbon对象,并会在后台自动为您完成。


它不会是 dd/mm/yyyy - 它将是 PHP 的 date() 命令中的任何格式 - 但除此之外加1。 - ceejayoz

4

使用

Carbon::createFromFormat('d/m/Y', $request->start)->format('d/m/Y')

你需要使用以下代码进行更改

return Company->expenses()->where('date_expense', Carbon::createFromFormat('d/m/Y', $request->start)->format('Y-m-d'))->get();

0

如果你的 Laravel 框架版本是 5.0+,你可以通过 php artisan -V 命令来检查。

我的版本是 Laravel Framework 5.4.19,你可以参考 Laravel 文档 https://laravel.com/docs/5.4/eloquent-mutators#date-mutators

以下是一个示例:

  1. 如果你的 Laravel 框架中没有 Carbon,你可以运行

    composer require nesbot/carbon

  2. 在你的模型(例如 Post 模型)中添加如下代码:

class Post extends Model`
{
    protected $fillable = ["title","body"];`
protected $dates = [` 'created_at',` 'updated_at',` 'deleted_at'` ]; }
  1. 使用 tinker 添加一篇文章,在项目目录下打开终端并运行 php artisan tinker 命令。

App\Post::create("title"=>"这是标题","body"=>"这是正文")

然后你可以通过Carbon获取最新创建的帖子的创建时间

使用App\Post::latest()->get()->created_at->diffForHumans()

你也可以在blade中使用相同的方法,像这样 {{ $post->created_at->diffForHumans() }}

Carbon文档的URL如下:http://carbon.nesbot.com/docs/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接