首页 > 解决方案 > 将日期时间保存到 DB codeigniter 总是 1970

问题描述

我有一个代码来保存数据库中的发布日期,但它总是更改为 1970/01/01 07:00 我使用 codeigniter 框架,这是我的视图代码

            <div class="form-group">
                <label class="control-label col-md-2">Publish Date</label>
                <div class="col-md-10">
                    <div class="input-group date form_datetime bs-datetime" data-date-format="yyyy-mm-dd HH:ii">
                        <input type="text" name="form[date]" class="form-control" readonly="">
                        <span class="input-group-addon">
                            <button class="btn default date-reset" type="button">
                                <i class="fa fa-times"></i>
                            </button>
                        </span>
                        <span class="input-group-addon">
                            <button class="btn default date-set" type="button">
                                <i class="fa fa-calendar"></i>
                            </button>
                        </span>
                    </div>
                </div>
            </div>

这是我的控制器

$form = $this->input->post('form');
$data['PUBLISH'] = date('Y/m/d H:i a', strtotime($form['date']));

当我打印时$form['date'],结果是正常的,但是当我转换$form['date']为日期格式时,它是错误的错误在哪里?

标签: phpcodeigniterdatetime

解决方案


看起来您的输入名称和数组键不一致(“日期”与“日期”)。

Unix 时间戳相对于 1970 年 1 月 1 日,因此这是时间戳 0 的值。未定义的数组键将导致值为 null(并且可能在日志中出现通知/警告)。strtotime当第一个参数为 null 时将返回 false,当传递到date1970/01/01 时将被强制转换为 0。

编辑

从您在评论中的附加信息来看,问题是您提供的日期格式无法被strtotime. 您将需要使用不同的方法解析您的预期格式。

您可以使用DateTime::createFromFormat解析特定格式,然后使用DateTime::format将其存储为所需格式。例如:

$date=DateTime::createFromFormat("d F Y - H:i", $form["date"]);
$data["PUBLISH"]=$date->format("Y/m/d H:i a");

推荐阅读