首页 文章

将字符串转换为Date和DateTime

提问于
浏览
235

如果我有一个格式为 mm-dd-YYYY 的PHP字符串(例如,10-16-2003),我该如何正确地将其转换为 Date 然后 DateTime 格式为 YYYY-mm-dd ?我要求 DateDateTime 的唯一原因是因为我需要一个一个位置,另一个位于另一个位置 .

6 回答

  • 384

    您需要注意m / d / Y和m-d-Y格式 . PHP认为 / 表示m / d / Y, - 表示d-m-Y . 在这种情况下,我会明确描述输入格式:

    $ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
    

    这样你就不会有某种解释的心血来潮 .

  • 359

    在您的第一个日期使用 strtotime() 然后 date('Y-m-d') 将其转换回来:

    $time = strtotime('10/16/2003');
    
    $newformat = date('Y-m-d',$time);
    
    echo $newformat;
    // 2003-10-16
    

    请注意,在strtotime()函数中使用正斜杠 / 和连字符 - 之间存在差异 . 引用php.net:

    通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点( . ),则假定为欧洲d-m-y格式 .

  • 22

    For first Date

    $_firstDate = date("m-d-Y", strtotime($_yourDateString));
    

    For New Date

    $_newDate = date("Y-m-d",strtotime($_yourDateString));
    
  • 0

    如果您的格式为dd-mm-yyyy,那么在PHP中它将无法按预期工作 . 在PHP文档中,他们有以下指南 .

    通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点( . ),则假定为欧洲d-m-y格式 .

    所以,你根本无法使用 . 当您尝试使用dd / mm / yyyy格式时,它将删除FALSE . 您可以使用以下内容进行调整 .

    $date = "23/02/2013";
    $timestamp = strtotime($date);
    if ($timestamp === FALSE) {
      $timestamp = strtotime(str_replace('/', '-', $date));
    }
    echo $timestamp; // prints 1361577600
    
  • 21
    $d = new DateTime('10-16-2003');
    
    $timestamp = $d->getTimestamp(); // Unix timestamp
    $formatted_date = $d->format('Y-m-d'); // 2003-10-16
    

    编辑:您还可以将DateTimeZone传递给DateTime()构造函数,以确保创建所需时区的日期,而不是服务器的默认日期 .

  • 1

    要解析日期,您应该使用:DateTime :: createFromFormat();

    例如:

    $dateDE = "16/10/2013";
    $dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
    

    但是,小心,因为这会崩溃:

    PHP Fatal error: Call to a member function format() on a non-object
    

    你实际上需要检查格式是否正常,首先:

    $dateDE = "16/10/2013";
    $dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);
    if (!$dateObj)
    {
        throw new \UnexpectedValueException("Could not parse the date: $date");
    }
    $dateUS = $dateObj->format("m/d/Y");
    

    现在,您将获得一个异常,而不是崩溃,您可以捕获,传播等 .

    $ dateDE格式错误,应为“16.10.2013”;

相关问题