【问题标题】:PHP/MySQL: Convert from YYYY-MM-DD to DD Month, YYYY?PHP/MySQL:从 YYYY-MM-DD 转换为 DD 月,YYYY?
【发布时间】:2010-10-19 03:27:39
【问题描述】:

我在 MySQL 表中有一个 DATE 列,它以这种格式表示日期:YYYY-MM-DD。

我想使用 PHP 从数据库中检索日期,但显示如下:DD Month, YYYY。

例如,从“2009-04-13”到“2009 年 4 月 13 日”。

女巫是最好的方法吗?? (我知道如何从数据库中获取日期。我只需要知道如何转换它)

我还需要用西班牙语显示月份名称。有一种方法可以做到这一点,而无需使用 strplc 或类似的东西每个月进行翻译??

我是编程新手,请详细说明。

谢谢!!!

【问题讨论】:

    标签: php mysql datetime


    【解决方案1】:

    参考 MySQL 中的DATE_FORMAT() 函数。我想这对你来说是最好的方式。

    另外,你可以这样做:

    • 从 DB 中获取您的日期
    • 在PHP中使用strtotime,转换为unix时间
    • 然后使用date格式化时间。

    通过使用 date(),当您在 PHP 中使用 setlocale 设置您的语言环境时,您将能够获得西班牙语月份名称。

    【讨论】:

      【解决方案2】:

      您还可以通过在 MySql 选择中使用 UNIX_TIMESTAMP(date) 来跳过 strtotime() 部分。但请记住,这是 MySQL 特有的功能,将来可能无法移植。

      【讨论】:

        【解决方案3】:

        执行以下 MySQL 查询:

        SET lc_time_names = 'es_ES';
        SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...
        

        使用 MySQLi 将是:

        $mysqli->query("SET lc_time_names = 'es_ES'");
        $stmt = $mysqli->prepare("SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...where id = ?");
        ...
        

        【讨论】:

        • 谢谢。如何将 SET lc_time_names 插入到下一个 mysqli 查询中??? $sql = 'SELECT personID, name, DATE_FORMAT(persons.birthdate, "%d de %M, %Y"), 出生地, countryID FROM people WHERE personID = ?';
        【解决方案4】:

        另一个尚未提及的选项:

        SQL:

        SELECT UNIX_TIMESTAMP(date) FROM table
        

        PHP:

        print date('your format', $timestamp_from_the_db);
        

        【讨论】:

          【解决方案5】:

          就个人而言,我喜欢在 MySQL 中使用整数数据类型来存储 UNIX 时间戳格式的日期。我将该整数的所有处理留给 PHP。保持表格和查询尽可能简单一直对我很有帮助。主要是,在我编写的代码中,日期对它们进行了某种计算。这一切都是在 PHP 端完成的,并且始终采用 UNIX 时间戳格式。以 UNIX 时间戳格式以外的任何格式存储或检索日期只是意味着错误蔓延的另一个步骤,并使查询的模块化程度降低。日期的格式最好留到显示前的最后一分钟。这只是我的看法,但除非存在无法在提取后处理 DB 值的极端情况,否则不应在 SQL 端格式化日期。

          一个简化的例子:

          <?php
          
          $date = now();
          $dueDate = $date + 60*60*24*7; // One week from now
          
          $sqlInsert = "INSERT INTO reports SET `dueDate` = $date";
          $resInsert = mysql_query( $sqlInsert );
          
          $sqlSelect = "SELECT `dueDate` FROM reports";
          $resSelect = mysql_query( $sqlSelect );
          $rowSelect = mysql_fetch_array( $resSelect );
          
          $DB_dueDate = $rowSelect['dueDate'];
          
          $daysUntilDue = ( $DB_dueDate - now() ) / 60*60*24;
          
          $formattedDueDate = date( "j F, Y", $DB_dueDate );
          
          ?>
          
          The report is due on <?=$formattedDueDate?>.  That is <?=$daysUntilDue?> from now.
          

          【讨论】:

            【解决方案6】:

            最简单的方法是使用strtotime() 函数将输入标准化为 UNIX 时间戳。

            然后使用date() 函数以您希望的任何格式输出日期。请注意,您需要将 UNIX 时间戳作为第二个参数传递给 date()。

            【讨论】:

              【解决方案7】:

              这将帮助您根据需要进行转换:

              $dob ='2009-04-13';
              echo date('d M Y', strtotime($dob));
              

              【讨论】:

                【解决方案8】:

                $origDate = "2018-04-20";

                $newDate = date("d-m-Y", strtotime($origDate)); 回声 $newDate;

                【讨论】:

                • 请为您的代码添加一些解释,并添加使您的解决方案比此处已发布的其他解决方案更好的原因
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-06-21
                • 1970-01-01
                • 1970-01-01
                • 2023-03-08
                • 1970-01-01
                • 1970-01-01
                • 2012-09-12
                相关资源
                最近更新 更多