【问题标题】:php date format does not insert time in databasephp日期格式不会在数据库中插入时间
【发布时间】:2017-11-29 07:30:28
【问题描述】:

我在php controller 中使用日期格式,例如

$meter->created_at = date('Y-m-d H:i:s');

但我得到的输出是2017-11-29 00:00:00

我也检查了这个solution

更新 1

我正在通过 excel 文件插入一些数据。

foreach($final_data as $key=>$value)
    {
        if($key <= $header_index) continue;
        $meter = new Meters;

        foreach($value as $k=>$v){
            $v = preg_replace('/\s+/', ' ', trim($v));
            if(isset($fieldSet[0]['meter_msn']) && $fieldSet[0]['meter_msn']==$k){
                $meter->meter_msn =$v."";
                // echo $v.", ";
            }

            if(isset($fieldSet[0]['description']) && $fieldSet[0]['description']==$k){
                $meter->description = $v;
            }

            if (isset($fieldSet[0]['status']) && $fieldSet[0]['status'] == $k) {
                $meter->status = $v;
            }

            if (isset($fieldSet[0]['meter_status']) && $fieldSet[0]['meter_status'] == $k) {
                $meter->meter_status = $v;
            }

            if (isset($fieldSet[0]['historic']) && $fieldSet[0]['historic'] == $k) {
                $meter->historic = $v;
            }

        }
        $meter->created_at = date('Y-m-d H:i:s');
        if($meter->save())
            $ok_count++;
        else
            $status_arr[] = $meter->errors;

    } 

任何帮助将不胜感激。

【问题讨论】:

  • 你的表created_at字段的数据类型是什么?
  • 请提供更多信息。你的输入是什么?你的插入语句是什么?是否在您的数据库中插入了其他内容?尽可能精确并提供尽可能多的信息。
  • @BabakBandpey 在数据库中是datetime
  • @SheperdOfFire 请检查我的update 1
  • 在保存前转储$meter。你得到了什么?

标签: php mysql date yii2


【解决方案1】:

created_atupdate_at 等日期字段的数据类型保留为int,并在模型中使用TimestampBehaviour

默认情况下,当关联的AR 对象为inserted 时,TimestampBehavior 将使用当前timestamp 填充created_atupdated_at 属性。当AR 对象为updated 时,它将用timestamp 填充updated_at 属性。 timestamp 值是由 time() 获得的,无论何时何地你想显示日期,你都可以使用 php 的 date() 函数对其进行格式化,当框架本身可以通过常规方法完成时,不需要让它变得复杂。

您可能只需稍作更改即可将列重命名为 created_atupdated_at,然后在模型中包含如下所示的 TimestampBehaviour

使用 yii\behaviors\TimestampBehavior;

 public function behaviors() {
        return [
            TimestampBehavior::className(),
        ];
    }

或者,如果您想按原样使用列名,您可以使用以下方法来映射您的字段名

use yii\db\Expression;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'create_time',
            'updatedAtAttribute' => 'update_time',
            'value' => new Expression('NOW()'),
        ],
    ];
}

TimestampBehavior 还提供了一个名为touch() 的方法,允许您将当前的timestamp 分配给指定的attribute(s) 并将它们保存到数据库中。例如,

$model->touch('creation_time');

【讨论】:

  • is ko b accept ker lo @MrFaisal , itna English solution diya tha
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2019-12-10
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多