【问题标题】:convert php date to mysql format将php日期转换为mysql格式
【发布时间】:2011-10-11 01:55:51
【问题描述】:

我在 php 中有一个使用此代码的日期字段:

$date = mysql_real_escape_string($_POST['intake_date']);

如何将其转换为 MySql 格式 0000-00-00 以包含在 db.是不是这样的:date('Ymd' strtotime($date);。我问的原因是因为我尝试了这个的变体,但我似乎无法让它工作。显示为 1970 或其他一些变体非常感谢

【问题讨论】:

  • $_POST['intake_date'] 当前的格式如何?我想 MySQL 列的类型为 DATE?
  • 原始日期是 unix 时间戳吗? (139293929 看东西)
  • @jakub 不,它是 0000-00-00 00:00:00

标签: php mysql


【解决方案1】:

您正在寻找 MySQL 函数 FROM_UNIXTIME()UNIX_TIMESTAMP()

在你的 SQL 中使用它们,例如:

mysql> SELECT UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
|            1311343579 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1311343579);
+---------------------------+
| FROM_UNIXTIME(1311343579) |
+---------------------------+
| 2011-07-22 15:06:19       |
+---------------------------+
1 row in set (0.00 sec)

【讨论】:

    【解决方案2】:

    这个网站有两个非常简单的解决方案 - 只需检查代码,我提供了描述以备不时之需 - 为您节省一些点击次数。

    http://www.richardlord.net/blog/dates-in-php-and-mysql

    1.一种常见的解决方案是将日期存储在 DATETIME 字段中,并使用 PHP 的 date() 和 strtotime() 函数在 PHP 时间戳和 MySQL DATETIME 之间进行转换。这些方法将按如下方式使用 -

    $mysqldate = date( 'Y-m-d H:i:s', $phpdate );
    $phpdate = strtotime( $mysqldate );
    

    2.我们的第二个选择是让 MySQL 来完成这项工作。 MySQL 具有可用于在访问数据库时转换数据的功能。 UNIX_TIMESTAMP 将从 DATETIME 转换为 PHP 时间戳,FROM_UNIXTIME 将从 PHP 时间戳转换为 DATETIME。这些方法在 SQL 查询中使用。所以我们使用这样的查询插入和更新日期 -

    $query = "UPDATE table SET
        datetimefield = FROM_UNIXTIME($phpdate)
        WHERE...";
    $query = "SELECT UNIX_TIMESTAMP(datetimefield)
        FROM table WHERE...";
    

    【讨论】:

    • 我使用这个代码:$date = mysql_real_escape_string($_POST['intake_date']); $newdate = date('Y-m-d H:i:s', strtotime($date));但它似乎将它放在数据库中 00:00:00 的 YYYY-dd-mm 中。日期和月份似乎颠倒了。谢谢
    • 说实话,我不完全确定为什么会发生这种情况 - 我会考虑并回复你,除非有人打败我 - 抱歉!
    【解决方案3】:
    function my_date_parse($date)
    {
            if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m))
                    return false;
    
            $day = $m[1];
            $month = $m[2];
            $year = $m[3];
    
            if (!checkdate($month, $day, $year))
                    return false;
    
            return "$year-$month-$day";
    }
    

    【讨论】:

      【解决方案4】:

      如果intake_date 是一些常见的日期格式,您可以使用date()strtotime()

      $mysqlDate = date('Y-m-d H:i:s', strtotime($_POST['intake_date']));
      

      但是,这仅在strtotime() 接受日期格式时才有效。有关支持的格式,请参阅 it's doc page

      【讨论】:

        【解决方案5】:

        有多种选择。

        将其转换为时间戳并按照其他帖子中的说明使用strtotime() 或使用MySQL’s date parsing option

        【讨论】:

          【解决方案6】:
          $date = mysql_real_escape_string($_POST['intake_date']);
          

          1。如果您的 MySQL 列是 DATE,请键入:

          $date = date('Y-m-d', strtotime(str_replace('-', '/', $date)));
          

          2。如果您的 MySQL 列是 DATETIME,请键入:

          $date = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date)));
          

          您不必工作 strototime(),因为它不适用于破折号 - 分隔符,它会尝试做减法。


          更新,您的日期格式无法使用strtotime(),请改用此代码:

          $date = '02/07/2009 00:07:00';
          $date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date);
          echo $date;
          

          输出:

          2009-07-02 00:07:00
          

          【讨论】:

          • @bollo:你试过我的代码了吗?给我一个示例日期时间来测试,但我怀疑它会正常工作。
          • 它仍在逆转 d & m。例如,使用您的代码,转换后,这是出现在 db: 2009-02-07 00:07:00 但它应该是 2009-07-02 00:07:00。 firbug 中的响应显示帖子为 02/07/2009 00:07:00。谢谢
          • @bollo:你的日期格式,不能使用strtotime()。我更新了我的答案。请检查更新部分的代码。
          • 我对 preg_replace 的兴趣不大。代码到底在做什么?另外,我的日期格式有何不同?我在没有问题的其他页面上使用这种格式。作为测试,我通过 firebug json 发回了响应,结果如下:“date”:“2009-02-07 00:07:00”,所以它没有正确到达数据库。谢谢
          • @bollo:你现在的约会方式是DD/MM/YYYY,应该是MM/DD/YYYYstrtotime() 一起工作。上面的preg_replace() 会将日期格式化为我在上面显示的输出样式。也许您发回了错误的变量,因为我只是仔细检查了它,它以您希望日期格式的方式响应。
          【解决方案7】:

          如果您知道 $_POST[intake_date] 中日期的格式,您可以使用 explode 获取年、月和时间,然后连接以形成有效的 mySql 日期。例如,如果您的日期为 12/15/1988,您可以这样做

              $date = explode($_POST['intake_date'], '/');
              mysql_date = $date[2].'-'$date[1].'-'$date[0];
          

          如果你有有效的日期 date('y-m-d', strtotime($date));应该也可以

          【讨论】:

            【解决方案8】:

            如果您有 dd/mm/yyyy 格式的发布日期,请使用以下内容:

            $date = explode('/', $_POST['posted_date']);
            $new_date = $date[2].'-'.$date[1].'-'.$date[0];
            

            如果你在 mm/dd/yyyy 中有它,只需更改第二行:

            $new_date = $date[2].'-'.$date[0].'-'.$date[1];
            

            【讨论】:

              【解决方案9】:

              PHP 5.3 具有从您指定的任何格式在 DateTime 对象处创建和重新格式化的功能:

              $mysql_date = "2012-01-02";   // date in Y-m-d format as MySQL stores it
              $date_obj = date_create_from_format('Y-m-d',$mysql_date);
              $date = date_format($date_obj, 'm/d/Y');
              echo $date;
              

              输出:

              01/02/2012
              

              MySQL还可以在插入/更新时使用STR_TO_DATE()函数控制格式化,在查询时使用DATE_FORMAT()

              $php_date = "01/02/2012";
              $update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')";
              $query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-08-13
                • 2014-02-25
                • 2012-06-05
                • 1970-01-01
                • 1970-01-01
                • 2013-12-15
                • 1970-01-01
                相关资源
                最近更新 更多