weixin_39813541
四次元口袋
2019-07-24 13:43
采纳率: 0%
浏览 1.2k

在 PHP 中将一个日期格式转换为另一个日期格式

在 PHP 中,有没有一种简单的方法将一种日期格式转换为另一种日期格式?
看这儿:

$old_date = date('y-m-d-h-i-s');            // works
$middle = strtotime($old_date);             // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

但是我当然希望它返回一个当前的日期。哪儿不对?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • weixin_39684284
    ermaotech 2019-07-24 13:58
    strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳
    //如下
    $old_date = date('y-m-d-h-i-s');
    $date = DateTime::createFromFormat('y-m-d-h-i-s', $old_date);
    echo $date->format('Y-m-d');
    
    点赞 评论
  • weixin_38166435
    weixin_38166435 2019-07-24 14:08

    Date ()的第二个参数需要是一个正确的timestamp(自1970年1月1日以来的秒)。 您正在传递一个 date() 无法识别的字符串。
    可以使用 strtotime ()将日期字符串转换为 timestamp。 但是,即使是 strtotime ()也不能识别 y-m-d-h-i-s 格式。
    PHP 5.3及以上版本
    DateTime::createFromFormat
    它允许使用 date ()语法指定一个精确的掩码来解析传入的字符串日期。
    PHP 5.2及以下版本
    您必须使用 substr ()手动解析元素(年、月、日、小时、分钟、秒) ,并将结果给mktime() ,它将为您构建一个timestamp。
    但是工作量大! 我建议使用 strftime ()能够理解的不同格式。 Strftime ()能够理解任何日期输入,最多也就是不懂这个the next time joe will slip on the ice
    例如,这个方法可行:

    $old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
    $old_date_timestamp = strtotime($old_date);
    $new_date = date('Y-m-d H:i:s', $old_date_timestamp);
    
    点赞 评论
  • weixin_38166411
    weixin_38166411 2019-07-24 14:19

    最简单的方法就是

    $myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
    $newDateString = $myDateTime->format('m/d/Y');
    

    首先给出 $dateString 所使用的格式。 然后您告诉它您希望 $newDateString 采用的格式。
    这也避免了 strtotime 的使用,有时候 strtotime 很难处理。
    如果您不是从一种日期格式转换到另一种日期格式,而只是希望将当前日期(或日期时间)转换为特定格式,那么更简单:

    $now = new DateTime();
    $timestring = $now->format('Y-m-d h:i:s');
    
    点赞 评论
  • weixin_38166347
    weixin_38166347 2019-07-24 14:30

    基本知识
    将一种日期格式转换为另一种格式的简单方法是使用带 date ()的 strtotime ()。 Strtotime ()将把日期转换为 Unix Timestamp。 然后,可以将该 Unix Timestamp传递给 date () ,以将其转换为新格式。

    $timestamp = strtotime('2008-07-01T22:35:17.02');
    $new_date_format = date('Y-m-d H:i:s', $timestamp);
    

    或者:

    $new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
    

    用DateTime()
    在 PHP 5.2中,PHP 提供了 DateTime ()类,它为我们提供了处理日期(和时间)的更强大的工具。 我们可以使用 DateTime ()重写上面的代码,如下所示:

    $date = new DateTime('2008-07-01T22:35:17.02');
    $new_date_format = $date->format('Y-m-d H:i:s');
    

    用 Unix timestamps
    Date ()接受一个 Unix timeatamp 作为它的第二个参数,并返回一个格式化的日期:
    $new_date_format = date('Y-m-d H:i:s', '1234567890');
    DateTime() works with Unix timestamps by adding an @ before the timestamp:
    Datetime ()通过在timestamp之前添加@来使用Unix timestamp:
    $date = new DateTime('@1234567890');
    $new_date_format = $date->format('Y-m-d H:i:s');
    如果时间戳以毫秒为单位(可能以000结束,或者时间戳长达十三个字符) ,你需要将其转换为秒,然后才能将其转换为另一种格式。有两种方法可以做到这一点:
    改后三位数字可以有几种方法,但是使用 substr ()是最简单的:
    $timestamp = substr('1234567899000', -3);
    还可以将时间戳除以1000,将其转换为秒。 因为时间戳对于32位系统来说太大了,所以你需要使用 BCMath 库来计算字符串:
    $timestamp = bcdiv('1234567899000', '1000');
    要获得 Unix Timestamp ,可以使用 strtotime () ,它返回一个 Unix Timestamp:
    $timestamp = strtotime('1973-04-18');
    使用 DateTime ()可以使用 DateTime::getTimestamp()
    $date = new DateTime('2008-07-01T22:35:17.02');
    $timestamp = $date->getTimestamp();
    如果你正在运行 PHP 5.2,你可以改用 u 格式选项:
    $date = new DateTime('2008-07-01T22:35:17.02');
    $timestamp = $date->format('U');
    使用非标准和不明确的日期格式
    可惜,并非所有开发人员必须处理的日期都是标准格式的。好在PHP 5.3为我们提供了一个解决方案。 Datetime: : createFromFormat ()允许我们告诉 PHP 日期字符串的格式,以便成功地将其解析为 DateTime 对象进行进一步操作。
    $date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
    $new_date_format = $date->format('Y-m-d H:i:s');
    在 PHP 5.4中,我们获得了在实例化时进行类成员访问的能力,这使得我们可以将 DateTime ()代码转换为一行程序:
    $new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

    $new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');

    点赞 评论

相关推荐