【问题标题】:Strange Date returned from laravel从 laravel 返回的奇怪日期
【发布时间】:2015-12-18 14:35:37
【问题描述】:

我正在向我的数据库发布一个日期。列类型是 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();
    }
}

【问题讨论】:

    标签: php mysql date laravel datetime


    【解决方案1】:

    在您的示例中显示时,使用 parse 方法运行 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();
    }
    

    【讨论】:

    • 谢谢。这很奇怪,因为它似乎在它到达数据库之前对我来说已经解析好了,但我可以删除它。但是,似乎没有查看受保护的日期?如果我以完全正确的 mySQL 格式发送日期,我只能保存模型?
    • 这是我的存档Member::where('member_lead_trace', $request-&gt;user)-&gt;update( $data )
    • 你使用的是什么版本的 Laravel?你能用你的完整模型更新你的问题,也许你的表迁移。肯定发生了一些有趣的事情。
    • 如果您使用 Laravel 4,那么您需要以不同的方式指定日期修改器,请参阅 laravel.com/docs/4.2/eloquent#date-mutators
    • 谢谢马克,它是 5.1... 我已经添加了模型等
    【解决方案2】:

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

    你只需要以那种形式疼痛。

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

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

    【讨论】:

    • 如果他传入 Carbon Laravel 的实例,应该没问题。所以这不应该是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多