【问题标题】:Getting datetime object from a string given by a user从用户给出的字符串中获取日期时间对象
【发布时间】:2018-08-21 10:00:23
【问题描述】:

问题是当用户以以下任何格式(dd-mm-yyyy,yyyy-mm-dd)提供日期时,从字符串中获取日期时间对象我的结果应该是(yyyy-mm-dd)。我的功能如下:

public function dateOfBirth($date){
    $date_format = strtotime($date);
    $result = new \DateTime('@'.$date_format);
}

当日期为(yyyy-mm-dd)格式时,它成功返回日期为(yyyy-mm-dd),但当用户提供日期为(dd-mm-yyyy)格式时返回以下错误

DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character

当用户输入上述任何格式时,我需要以 (yyyy-mm-dd) 格式返回日期

【问题讨论】:

  • 你为什么要把@放在开头
  • 没有@ 代码可以正常工作
  • 您发布的代码与new \DateTime($date)相同。 DateTime::__construct()strtotime() 使用与 parse the date strings 相同的引擎。
  • @RiggsFolly:@… 表示法对于使用 unix 时间戳初始化 datetime 对象是有效的。
  • @lxg 当我学到一些东西时总是美好的一天。谢谢

标签: php


【解决方案1】:
$one = new \DateTime('2018-08-12');
$two = new \DateTime('12-08-2018');
var_dump($one, $two);

在 php 5.6+ 中都是有效的 DateTime 对象。所以现在您可以以所需的格式返回它

$one->format('Y-m-d'); // echoes 2018-08-12
$two->format('Y-m-d'); // echoes 2018-08-12

【讨论】:

    【解决方案2】:

    试试这个代码:

    function getFormattedDate($date)
    {
        $dateObj = new DateTime($date);
    
        return $dateObj->format('Y-m-d');
    }
    

    调用函数:

    print_r(getFormattedDate('23-12-2017'));
    print_r(getFormattedDate('2016-02-20'));
    print_r(getFormattedDate('15-05-2018'));
    

    【讨论】:

      【解决方案3】:

      此代码对我有用,谢谢大家的回复,

      public function dateOfBirth($date){
          $date_format = strtotime($date);
          $result = (new \DateTime())->setTimestamp($date_format);
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用date()DateTime 的组合,如下所示;

        public function formatDate($date){
            $dateObj = new DateTime(date($date));
        
            return $dateObj->format('Y-m-d');
        }
        

        【讨论】:

          【解决方案5】:
              $in1 = '2018-08-20';
              $in2 = '20-08-2018';
              print_r(userDate($in1)); // 2018-08-20
              print_r(userDate($in2)); // 2018-08-20
              print_r(userDate(time())); // 2018-08-20
          
              function userDate($date)
              {
                  if ($result = \DateTime::createFromFormat('Y-m-d', $date)) return $result->format('Y-m-d');
                  if ($result = \DateTime::createFromFormat('d-m-Y', $date)) return $result->format('Y-m-d');
                  // ...
                  $dt = new \DateTime();
                  if ($result = $dt->setTimestamp($date)) return $result->format('Y-m-d');
                  return null;
              }
          

          【讨论】:

          • 这段代码有什么意义?有什么解释吗?它是如何回答问题的?
          猜你喜欢
          • 2016-07-24
          • 2013-04-01
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多