【问题标题】:check date if its 12 hour format or 24 hour format in PHP?检查日期在 PHP 中是 12 小时格式还是 24 小时格式?
【发布时间】:2021-05-09 14:45:30
【问题描述】:

我想查看日期,如果是 12h 格式,则转换为 24h 格式,例如

$date="2021-02-5 11:45:00 AM"

在我检查后:

 if (preg_match("/am|pm|AM|PM/", $date))
        {
            $date=date('Y-m-d H:i:s',strtotime("$date"));
        }

我的输出应该是这样的,但它不能正常工作,

$date="2021-02-5 11:45:00";

但是,在 if 条件下,两种日期格式都无法正常工作。

【问题讨论】:

  • 当你说“不起作用”时,是因为你得到的是05而不是5吗? d 的问题是什么。格式代码记录在here
  • "$date" 等价于$date
  • 您是否一直收到相同的日期格式?在 php 中处理日期的最佳方法是使用内部函数,例如 DateTime 对象,它允许您创建FromFormat,然后格式化方法来转换它,如果您想在答案中显示一个示例

标签: php contains date-parsing


【解决方案1】:

转换时间格式

// 24-hour time to 12-hour time 
$time_in_12_hour_format  = date("g:i a", strtotime("13:30"));

// 12-hour time to 24-hour time 
$time_in_24_hour_format  = date("H:i", strtotime("1:30 PM"));

【讨论】:

    【解决方案2】:

    您不需要regex 来检查它是 24 小时还是 12 小时。您可以简单地将日期传递给strtotime 函数以获取日期的时间戳,然后使用date 函数格式化时间戳。

    $date="2021-02-5 11:45:00 AM";
    $date=date('Y-m-j H:i:s',strtotime($date));
    echo $date;  // 2021-02-5 11:45:00
    

    【讨论】:

      【解决方案3】:
      date_create_from_format('Y-m-j H:i:s A', $date);
      

      它会返回一个 DateTime 对象,你可以得到你想要的正确日期,如果日期字符串与模式不匹配,它将返回 false。

      DateTime Object
      (
          [date] => 2021-02-05 11:45:00.000000
          [timezone_type] => 3
          [timezone] => UTC
      )
      
      date_create_from_format ( string $format , string $time , DateTimeZone $timezone = ? ) : DateTime
      

      【讨论】:

        【解决方案4】:

        使用strtotime,您无法控制格式。为了更好地了解正在发生的事情,请使用功能丰富的 DateTime 类。首先将字符串转换为DateTime 对象,然后将其格式化为您需要的任何内容。

        <?php
        $dt = "2021-02-5 11:45:00 pm";
        
        if (preg_match('/am$|pm$/i', $dt)) // is there an Ante meridiem/Post meridiem suffix?
        {
            $dtFormat = 'Y-n-j H:i:s a';
        }
        else 
        {
            $dtFormat = 'Y-n-j H:i:s';
        }
        
        $ts = DateTime::createFromFormat($dtFormat, $dt);
        $date = $ts -> format('Y-m-d H:i:s');
        
        // echo 'Result: '. $date;
        

        【讨论】:

          猜你喜欢
          • 2011-11-18
          • 2012-07-08
          • 2018-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多