Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带时区的Laravel 5返回日期时间_Php_Eloquent_Laravel 5_Php Carbon - Fatal编程技术网

Php 带时区的Laravel 5返回日期时间

Php 带时区的Laravel 5返回日期时间,php,eloquent,laravel-5,php-carbon,Php,Eloquent,Laravel 5,Php Carbon,我正在构建一个API,我想返回我所有的时间戳,比如创建时、删除时。。。等等,作为复杂对象,包括实际的日期时间,但也包括时区。 我已经在控制器中使用了{Carbon/Carbon}。我也在模型中定义了日期字段。 当我访问控制器中的日期字段时,我实际上得到了碳对象。但当我将结果集返回为JSON时,我只看到datetime字符串。不是时区 当前JSON { "id": 4, "username": "purusScarlett93", "firstname": null,

我正在构建一个API,我想返回我所有的时间戳,比如创建时、删除时。。。等等,作为复杂对象,包括实际的日期时间,但也包括时区。 我已经在控制器中使用了{Carbon/Carbon}。我也在模型中定义了日期字段。 当我访问控制器中的日期字段时,我实际上得到了碳对象。但当我将结果集返回为JSON时,我只看到datetime字符串。不是时区

当前JSON

{
    "id": 4,
    "username": "purusScarlett93",
    "firstname": null,
    "lastname": null,
    "language_id": 1,
    "pic": null,
    "email": null,
    "authtoken": "f54e17b2ffc7203afe345d947f0bf8ceab954ac4f08cc19990fc41d53fe4eef8",
    "authdate": "2015-05-27 12:31:13",
    "activation_code": null,
    "active": 0,
    "devices": [],
    "sports": []
}
我的愿望:)

{
  "id": 4,
  "username": "purusScarlett93",
  "firstname": null,
  "language_id": 1,
  "pic": null,
  "email": null,
   "authtoken":"f54e17b2ffc7203afe41d53fe4eef8",
   "authdate": [
     {
       "datetime": "2015-05-27 12:31:13",
       "timezone": "UTC+2"
     }
   ],
   "activation_code": null,
   "active": 0
 }

你知道我在这里遗漏了什么吗?

你可以尝试在你的模型中添加如下功能:

public function getAuthDateAttribute() {
  return [
   "datetime" => "2015-05-27 12:31:13",
   "timezone" => "UTC+2"
 ];}

这是因为所有
Carbon
对象都有一个
\uuuu toString()
函数,当您尝试将对象转换为字符串(即JSON)时会触发该函数。尝试看看是否可以在模型上创建自己的访问器,该访问器为您提供一个自定义数组而不是字符串

public function getAuthdateAttribute(Carbon $authdate) {
   return [
           'datetime' => $authdate->toDateTimeString(),
           'timezone' => 'UTC' . $authdate->offsetHours
          ];
}
正如用户Alariva所指出的,此方法将覆盖访问
authdate
的默认方式;因此,如果您想访问原始的
Carbon
对象,可能需要为此创建一个特殊的方法

或者你可以聪明一点,做这样的事情:

public function getAuthdateAttribute(Carbon $authdate) {
   return [
           'datetime' => $authdate,
           'timezone' => 'UTC' . $authdate->offsetHours
          ];
}

然后要访问原始对象:
$carbon=$this->authdate['datetime']

我相信您可以通过更改authdate访问器来实现这一点,但请注意,这将更改整个应用程序中对日期的访问。对于特定API调用的更具体的更改,您可以在控制器中处理,或者通过一个显示类处理,该显示类接受carbon对象并生成您将要创建的2项数组。