从laravel返回奇怪的日期

时间:2015-12-18 14:35:38

标签: php mysql date laravel datetime

我正在向我的数据库发布日期。列类型是TIMESTAMP,但无论我发送什么,laravel都不会转换日期。我已经手动检查过Carbon :: parse()可以格式化我正确发送的日期,这很好。

发布日期示例:{ "interview_date": "18 December 2015 - 14:24" }

在数据库中保存为:0000-00-00 00:00:00

返回为:{ "interview_date": "-0001-11-30 00:00:00" }

我在laravel模型中设置了protected $dates = ['interview_date'];

我的约会发生了什么事?任何帮助将不胜感激。

由于

更新:型号/控制器/ Laravel 5.1

<?php

namespace App\Clients;

use AlgoliaSearch\Laravel\AlgoliaEloquentTrait;
use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
use AlgoliaEloquentTrait;

public $primaryKey = "m_id";

protected $dates = ['interview_date'];

public $timestamps = false;

public static $objectIdKey = 'member_lead_trace';

public $indices = ['dev_leads'];

 protected $casts = [
    'interview_notes_received' => 'boolean',
    'interview_complete' => 'boolean',
];

public function leads()
{
    return $this->hasOne('App\Lead', 'id', 'member_lead_trace');
}

public function personal()
{
    return $this->hasOne('App\Personal', 'mem_id', 'm_id');
}

public function wants()
{
    return $this->hasOne('App\Want', 'mem_id', 'm_id');
}

public function photos()
{
    return $this->hasMany('App\Photo', 'mem_id', 'm_id');
}

public function attributes()
{
    return $this->hasMany('App\Attribute', 'mem_id', 'm_id');
}

public function financial()
{
    return $this->hasOne('App\Financial', 'mem_id', 'm_id');
}

public function profile()
{
    return $this->hasOne('App\Profile', 'mem_id', 'm_id');
}
}

控制器功能

public function update(Request $request)
{
    $data = json_decode($request->data, true);

    //return Carbon::parse($request->interview_date);


    try {
        return Member::where('member_lead_trace', $request->user)->update($data);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

2 个答案:

答案 0 :(得分:1)

使用修补程序运行Carbon,解析方法在您的示例中显示的时间似乎不起作用

Carbon::parse('18 December 2015 - 14:24');
  

消息'DateTime :: __ construct()的异常:无法解析位置17( - )的时间字符串(2015年12月18日 - 14:24):意外字符'

但是删除 - 它正确分析

Carbon::parse('18 December 2015 14:24');

返回有效的Carbon实例

Carbon\Carbon {#673   +"date": "2015-12-18 14:24:00.000000"  
+"timezone_type": 3   +"timezone": "UTC" }

删除 - 的替代方法是指定可以这样做的格式

Carbon::createFromFormat('d F Y - G:i', '18 December 2015 - 14:24');

假设您在当天有小前导零,小时看format options,如果不是这样的话。

更新:

在查看你的代码并查看Laravel一直在做什么后,我认为我们一直在假设Laravel会自动找出日期格式。我很高兴在这方面被证明是错误的。

然而,我提出的解决方案似乎是有效的

public function setInterviewDateAttribute($value)
{
    $this->attributes['interview_date'] = Carbon::createFromFormat('d F Y - H:i', $value)->toDateString();
}

答案 1 :(得分:0)

mysql中日期的默认格式为YYYY-mm-dd HH:MM:SS

你只需要那种格式的疼痛。

所以在插入数据之前,请像这样转换日期,

$d = "date in other format";
$date =date("Y-m-d H:i:s,strtotime($d));