【问题标题】:PHP posting datetime to mysqlPHP将日期时间发布到mysql
【发布时间】:2016-01-29 16:34:11
【问题描述】:

我无法弄清楚这一点,我确信这很容易,但我以错误的方式接近它。我有一个mysql items db,列名datePur 并输入datetime

样本数据;

+---------------------+
| datePur             |
+---------------------+
| 2015-11-03 11:05:00 |
+---------------------+
| 2014-12-02 07:14:11 |
+---------------------+
| 2015-08-01 11:09:34 |
+---------------------+

我的网络应用中有两个表单,viewedit

view 表单检索 db 数据并在 read only 表字段中显示日期,格式如下; (03-11-2015)

<td><input type='text' name='datePur' value="<?php echo date("d-m-Y", strtotime($datePur)); ?> disabled"></td>

这按预期工作。

我的 edit 表单检索相同的数据,但这次允许用户在必要时编辑日期。日期以以下格式显示给用户(不是我想要的); (2015-11-03 11:05:00)

<td><input type='text' name='datePur' value="<?php echo $datePur; ?>"></td>

我使用以下代码将数据发布到数据库;

edit.php

if (isset($_POST['btn-update'])) {
    $datePur = ($_POST['datePur']);
}

function.php

public function update($datePur) {
        try {
            $stmt = $this->db->prepare("UPDATE items SET datePur=:datePur");
            $stmt->bindParam(":datePur", $datePur);
            $stmt->execute();
            return true;
        } catch (PDOException $e) {
            echo $e->getMessage();
            return false;
        }
    }

只有当我以 Y-M-d h:i:s 格式输入日期时,表单才会提交 - 与显示的格式相同。例如,我不能输入 03-11-2015,因为表单不会提交。

我想让最终用户的日期格式保持一致。我希望以 d-m-Y 格式向最终用户显示日期时间always。但是我希望它以 Y-M-d h:i:s 格式插入到数据库中

感谢任何建议。

【问题讨论】:

标签: php mysql forms date datetime


【解决方案1】:

当他们更新时再次转换日期。

if (isset($_POST['btn-update'])) {
    $datePur = date('Y-m-d', strtotime($_POST['datePur']));
}

但是,我通常无法正确转换日期,因此我编写了一个函数来转换日期。

if (isset($_POST['btn-update'])) {
    $datePur = convertDate ($_POST['datePur']);
}

function convertDate ($date) {
    $date = str_replace("/", "-", $date);

    $date = explode("-", $date);

    return $date[2]."-".$date[0]."-".$date[1];
}



function convertTimestamp ($date) {
    $date = str_replace("/", "-", $date);

    $datetime = explode(" ", $date);
    $date = explode("-", $datetime[0]);
    $time = explode(':', $datetime[1]);

    $return = $date[2]."-".$date[0]."-".$date[1]." ".$time[0].":".$time[1].":00";

    if ($datetime[2] == 'PM' && $time[0] > 12) {
        $return = date('Y-m-d H:i:s', strtotime('+12 hours', strtotime($return)));
    }elseif ($datetime[2] == 'AM' && $time[0] == 12) {
        $return = date('Y-m-d H:i:s', strtotime('-12 hours', strtotime($return)));
    }

    return $return;
}

无论您使用“/”还是“-”作为日期分隔符,该功能都可以使用,但必须有一个格式为“m-d-Y”的日期作为初始日期。

【讨论】:

  • 使用/,格式为m/d/Y1/29/2016 是有效日期 1-29-2016 不是。使用- 时,格式为d-m-Y29-1-2016
  • @AbraCadaver 我的函数可以接受 01/29/2016 或 01-29-2016。它不使用 date 函数,因此 PHP 是否会将其视为有效日期无关紧要。这只是取决于用户的喜好而已。
  • @johnny_s 没问题,希望对您有所帮助。
【解决方案2】:

通过辅助函数或方法显示和保存日期的最简单方法。

// input format: d-m-Y H:i:s
function saveDate( $date_str )
{
   list( $date, $time ) = explode( ' ', $date_str );
   list( $d, $m, $y ) = explode( $date );
   return $y.'-'.$m.'-'.$d.' '.$time;
}

// input format (from DB): Y-m-d H:i:s
function loadDate( $date_str, $need_time = true )
{
   list( $date, $time ) = explode( ' ', $date_str );
   list( $y, $m, $d ) = explode( $date );
   return $d.'-'.$m.'-'.$y.' '.( $need_time ? $time : '' );
}

就是这样。您可以使用此代码显示时间:

<td><input type='text' name='datePur' value="<?php echo loadDate( $datePur ); ?>"></td>

...并保存:

$stmt = $this->db->prepare("UPDATE items SET datePur=:datePur");
        $stmt->bindParam(":datePur", saveDate( $datePur ) );

【讨论】:

    【解决方案3】:

    在绑定之前做一个date("Y-m-d H:i:s", strtotime($datePur))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2011-06-12
      相关资源
      最近更新 更多