从yyyymmdd格式转换为PHP中的日期

时间:2010-02-26 21:27:19

标签: php datetime date format

我的日期格式如下(yyyymmdd,18751104,19140722)...最简单的方法是将它转换为date()....或者使用mktime()和子字符串是我最好的选择......?

5 个答案:

答案 0 :(得分:36)

使用strtotime()将包含日期的字符串转换为Unix timestamp

<?php
// both lines output 813470400
echo strtotime("19951012"), "\n",
     strtotime("12 October 1995");
?>

您可以将结果作为第二个参数传递给date(),以自行重新格式化日期:

<?php
// prints 1995 Oct 12
echo date("Y M d", strtotime("19951012"));
?>

注意

strtotime()将在1970年初的Unix时代之前的日期失败。

作为替代方案,将适用于1970年之前的日期:

<?php
// Returns the year as an offset since 1900, negative for years before
$parts = strptime("18951012", "%Y%m%d");
$year = $parts['tm_year'] + 1900; // 1895
$day = $parts['tm_mday']; // 12
$month = $parts['tm_mon']; // 10
?>

答案 1 :(得分:7)

就个人而言,我只是使用substr()因为它可能是最轻的方法。

但这是一个采用日期的函数,您可以在其中指定格式。它返回一个关联数组,所以你可以这样做(未经测试):

$parsed_date = date_parse_from_format('Ymd', $date);
$timestamp = mktime($parsed_date['year'], $parsed_date['month'], $parsed_date['day']);

http://uk.php.net/manual/en/function.date-parse-from-format.php

虽然我必须说,但我认为没有比简单更容易或更有效的方法:

mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2));

答案 2 :(得分:0)

查看strptime

答案 3 :(得分:0)

非常感谢所有的答案,但1900年的问题似乎困扰着我得到的每一个回应。这是我正在使用的函数的副本,如果有人发现它将来对它们有用。

public static function nice_date($d){
    $ms = array(
           'January',
           'February',
           'March',
           'April',
           'May',
           'June',
           'July',
           'August',
           'September',
           'October',
           'November',
           'December'
    );

    $the_return = '';
    $the_month = abs(substr($d,4,2));
    if ($the_month != 0) {
        $the_return .= $ms[$the_month-1];
    }

    $the_day = abs(substr($d,6,2));
    if ($the_day != 0){
        $the_return .= ' '.$the_day;
    }

    $the_year = substr($d,0,4);
    if ($the_year != 0){
        if ($the_return != '') {
            $the_return .= ', ';
        }
        $the_return .= $the_year;
    }

    return $the_return;
}

答案 4 :(得分:0)

(PHP 5&gt; = 5.3.0,PHP 7):

您可以使用以下命令获取DateTime实例:

$dateTime = \DateTime::createFromFormat('Ymd|', '18951012');

并将其转换为时间戳:

$timestamp = $dateTime->getTimestamp();
// -> -2342217600