【问题标题】:How to reformat date in PHP?如何在 PHP 中重新格式化日期?
【发布时间】:2010-05-02 20:02:06
【问题描述】:

我正在从数据库中提取各种帖子的日期。日期格式如下:

2009-08-12

Numeric Year - Numeric Month - Numeric Day

如何将这些日期重新格式化为对用户更友好的格式,例如:

August 12, 2009

Numeric Month Numeric Date, Numeric Year

假设从 mysql 数据库中获取的日期存储在一个名为:

$date = $row['date_selected'];

【问题讨论】:

  • 是以这种形式存储为字符串,还是日期的MySQL字段类型为date?如果是这样,您可以在执行 SELECT 调用时对其进行格式化。
  • 当您立即获得 3 个答案时,所有答案都具有相同的两个函数调用,您应该意识到文档会为您提供答案。供您参考:php.net/manual
  • @icio,我同意这是一个相对容易查找的问题,如果您知道在哪里查找,但实际上下面有两种方法正在讨论中。另外,我认为没有太基本的问题,只要它们与编程相关。至少乔尔似乎总是在播客上这么说......
  • @sprugman 没关系。整个主题被问到了很多问题,这太荒谬了。
  • @chacha102,如果这是一个重复的问题,那么我想它可能应该被关闭。 (我没有这些权限。)

标签: php date


【解决方案1】:

与基于 strtotime 的示例不同,这允许您确保以正确的顺序解释月份和日期,而不管服务器上指定的区域设置如何。

$date = DateTime::createFromFormat('Y-m-d', '2009-08-12');
$output = $date->format('F j, Y');

【讨论】:

  • +1: DateTime 应该始终是首选,而不是strtotime
  • 你实际上可以在一行中做到这一点:$date = DateTime::createFromFormat('Y-m-d', '2009-08-12')->format('F j, Y');
  • +1 这是最好的答案。 strtotime() 并不总是正确的,因为 dd/mm/yyyy 格式看起来与 mm/dd/yyyy 格式完全相同。
【解决方案2】:

date("F d, Y", strtotime($input))

【讨论】:

  • 你不能通过调用 strtotime 来强制执行正确的处理。例如,有人可以切换月份和日期,而 strtotime 不会处理它。
  • 因为这被选为答案,尽管投票数少于@Billy,我将在下面重复@chacha 的回答我的评论:strtotime 方法是“标准”,如果您的服务器的语言环境设置期望月-日-年,它会正常工作,但@Billy 的方法更安全,假设您有 php 5.3 可用,这在共享主机上绝对不是一个安全的假设。
  • 此外,UNIX 纪元是关于最近的 EOL 和展望未来,如果您有可能使用 DateTime 对象,不建议使用 strtotime()。 + strtotime() 并不总是足够的,并且存在已知问题,但答案肯定适用于大多数情况。
【解决方案3】:
$new_format = date("Your Date String", strtotime($date));

见:
- http://php.net/strtotime
- http://php.net/date

基本上,如果strtotime() 可以正确读取,您可以随意重新格式化它。

在这种情况下,Year - Month - Day 是正确识别的 strtotime() 格式,其他格式可能不是这样。

【讨论】:

  • 你不能通过调用 strtotime 来强制执行正确的处理。例如,有人可以切换月份和日期,而 strtotime 不会处理它。
  • 就像我说的,如果strtotime()可以正确阅读,你就可以做到。
  • 但如果您只有字符串“2009-08-02”,则无法以编程方式确定日期格式是否正确。为此,您必须为年、月和日设置单独的输入字段。
  • @Femaref:是的,但是如果您使用 DateTime::createFromFormat,至少它会进行范围检查以确保如果您打算在该位置停留一个月,它不会接受值喜欢 31
  • @Chacha102:当然,在有人尝试在具有不同区域设置的服务器上运行脚本之前,这会很好用。
【解决方案4】:

您可以考虑使用您的 select 语句在 MySQL 中进行日期格式设置:

DATE_FORMAT(date,'%M %e, %Y') as date_selected

http://www.w3schools.com/sql/func_date_format.asp

【讨论】:

    【解决方案5】:
    <?php
    echo date('F j, Y', strtotime($date));
    

    【讨论】:

      【解决方案6】:

      你可能想看看php函数strtotime

      http://php.net/manual/en/function.strtotime.php

      它将大量的日期表示解析为 Unix 时间戳。

      然后使用date函数。

      【讨论】:

        【解决方案7】:

        使用 strtodate 或 explode 将日期拆分为不同的组件,然后可以使用具有适当格式字符串的日期函数:http://php.net/manual/en/function.date.php

        $date = "2009-08-12";
        list($year,$month,$day) = explode("-",$date);
        $formattedDate = date("F d, Y", mktime(0,0,0,$month,$day,$year));
        

        输出:“2009 年 8 月 12 日”

        【讨论】:

          【解决方案8】:
          <?php
          //Date Formatter
          /*
          date: date you want to convert
          format: its current format ie m-d-Y, m/d/Y, Y-m-d, Y/m/d
          delimS: Current delimiter ie - or / or .
          delimF: The delimiter you want for the result
          
          NOTE: this will only convert m-d-Y to Y-m-d and back
          */
          function dtform($date,$format,$delimS,$delimF){
              $dateFinal = '';
              if($format == 'm'.$delimS.'d'.$delimS.'Y'){
                  $dateFinal_exp = explode($delimS,$date);
                  $dateFinal = $dateFinal_exp[2].$delimF.$dateFinal_exp[0].$delimF.$dateFinal_exp[1];
              }else if($format == 'Y'.$delimS.'m'.$delimS.'d'){
          
                  $dateFinal_exp = explode($delimS,$date);
                  $dateFinal = $dateFinal_exp[1].$delimF.$dateFinal_exp[2].$delimF.$dateFinal_exp[0];
              }
              return $dateFinal;
          }
          ?>
          

          【讨论】:

            【解决方案9】:

            像这样使用它:

            // February 1, 2005
            print date ("F j, Y", mktime (0,0,0,14,1,2004));
            

            【讨论】:

              猜你喜欢
              • 2019-12-25
              • 1970-01-01
              • 1970-01-01
              • 2019-06-30
              • 1970-01-01
              • 2011-07-17
              • 2013-04-01
              • 2012-06-22
              • 1970-01-01
              相关资源
              最近更新 更多