使用Carbon在Laravel 5.2中将mySQL日期转换为英国时间格式?

时间:2016-05-24 09:38:16

标签: laravel date php-carbon

我的datetimepicker错误地显示日期为2026年5月20日,因为它在2016-05-26中存储在MySQL中。 目前我认为这是我应该做的:

$startDate = new Carbon ('d/m/Y H:i:s', $dateFromDB->startdate);

2 个答案:

答案 0 :(得分:3)

转换两次,为什么?

我对您的问题的一个问题是,您将数据库中的日期设为Y-m-d,然后将其转换为d/m/Y H:i:s,然后您的日期选择器将其显示为jS F Y你不能削减一次转换而不是两次转换吗?需要考虑的事情。

新建碳实例

如果您从数据库中获取Y-m-d的日期,那么您可以直接将其传递给您正在进行的Carbon实例:

$startDate = new Carbon($dateFromDB->startdate);

请参阅文档:http://carbon.nesbot.com/docs/#api-instantiation

然后您可以使用format()方法输出所需的日期格式:

$startDate->format('d/m/Y H:i:s'); // 26/05/2016 09:30:05

$startDate->format('jS F Y'); // 26th May 2016

雄辩的日期变异者

如果您使用eloquent获取正在转换的日期,您可以考虑的另一种方法是通过将日期添加到模型中的$dates属性来自动将日期转换为Carbon实例。

例如,如果您的模型中的日期为start_date,则可以执行以下操作:

class MyModel extends Model
{
    protected $dates = ['start_date'];
}

然后您可以在代码中直接访问它作为Carbon实例:

MyModel::first()->start_date->format('d/m/Y H:i:s');

请参阅文档:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators

仅使用PHP

您也可以使用这样的普通旧PHP来获取所需的日期格式:

$date = '2016-05-26 09:30:05';

$startDate = date('d/m/Y H:i:s', strtotime($date)); // 26/05/2016 09:30:05

$startDate = date('jS F Y', strtotime($date)); // 26th May 2016

答案 1 :(得分:1)

$dateFromDatabase = "2016-05-20";

$dt = Carbon::createFromFormat('Y-m-d', $dateFromDatabase);

// Where js F Y results in 20th May 2016
echo $dt->format('jS F Y');
相关问题