代码之家  ›  专栏  ›  技术社区  ›  tkotitan

获取日期格式的php函数?

  •  4
  • tkotitan  · 技术社区  · 15 年前

    我知道如何使用日期格式字符串 date('Y/m/d H:i:s'); 进入之内 2009/12/18 11:37:45 .

    我想要一个函数,可以做相反的-看一个格式化的日期,然后返回格式。有php语言的吗?

    原因是我们在数据库中以各种格式保存了时间戳,我正在编写一个工具来处理我们所有的旧表并分析日期条目。

    编辑:所以我想没有一个直截了当的方法可以做到这一点。我想我可以使用strftime(),它以秒为单位返回自纪元以来的时间。所以,一个更好的问题是,我可以在mysql数据库的timestamp字段中使用该时间(以秒为单位)吗?如果表的结构是一个时间戳而不是varchar(有时是这样),我想这是可行的。

    6 回复  |  直到 15 年前
        1
  •  3
  •   fooquency    15 年前

    不,没有这样的功能。您需要编写一组正则表达式匹配项来表示所有可能的变化,例如。

    $variations = array (
        '^([0-9]{4})/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{4}2$' => 'Y/m/d H:i:s',
        // more here
    );
    
    foreach ($dateFromDatabase as $date) {
        foreach ($variations as $regexp => $dateFormat) {
            if (preg_match ('|' . $regexp . '|', $date)) {
                $matches[$dateFromDatabase] = $dateFormat;
                break;
            }
        }
    }
    
    // $matches now consists of an array of dates => format
    
        2
  •  2
  •   Alix Axel    15 年前

    看一看 strptime() .

        3
  •  1
  •   qualbeen    15 年前

    是的,确实有一个函数: strtotime()

    strotime–将任何英文文本日期时间描述解析为unix时间戳

    编辑:好的,函数可能不会返回使用的格式,但是您将得到时间戳,然后您可以以任何格式存储它。

        4
  •  0
  •   gahooa    15 年前

    您可以使用regexp来标识特定的日期格式。你可以添加到你的regexp列表,直到你有100%的覆盖率。

    if(preg_match('/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/', $Date))
        $Format = 'Y/m/d H:i:s';
    

    等。。。

        5
  •  0
  •   Galen    15 年前

    你不需要把日期改成M/D/Y格式。您可以使用strtotime将任何有效日期转换为任何其他所需的日期格式。

    date( 'format', strtotime($date) );
    
        6
  •  0
  •   thetaiko    15 年前

    也许将它们全部保存为unix时间戳是一个更好的主意,然后您可以根据用户希望看到的内容轻松地对它们进行格式化。