簡體   English   中英

從laravel返回的奇怪日期

[英]Strange Date returned from laravel

我正在向數據庫發布日期。 列類型為TIMESTAMP,但無論我發送什么,laravel都不會轉換日期。 我已經手動檢查了Carbon :: parse()可以格式化我正確發送的日期,這很好。

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

在數據庫中0000-00-00 00:00:00為: 0000-00-00 00:00:00

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

我已經設置了protected $dates = ['interview_date']; 在我的Laravel模型中

我約會發生了什么事? 任何幫助將不勝感激。

謝謝

更新:模型/控制器/ 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();
    }
}

使用修補程序運行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');

這是假設您在白天和小時中都有前導零,如果不是這樣,請參閱格式選項

更新:

在查看了您的代碼並查看了Laravel所做的事情之后,我認為我們一直在錯誤地假設Laravel會自動找出日期格式。 我很高興被證明是錯誤的。

但是我想出的解決方案似乎是可行的

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

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

您只需要使用這種格式即可。

因此,在插入數據之前,請像這樣轉換日期,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM