web-dev-qa-db-ja.com

PHP yyyymmdd形式から)の日付への変換

私は次の形式の日付を持っています(yyyymmdd、18751104、19140722)...それをdate()に変換する最も簡単な方法は何ですか...またはmktime()と部分文字列を使用して私の最良のオプション...?

11
Serhiy

strtotime() を使用して、日付を含む文字列を nixタイムスタンプ に変換します。

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

結果を2番目のパラメーターとして 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
?>
_
38
meagar

個人的には、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));
7
Teekin

すべての回答に感謝しますが、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;
}
0
Serhiy

strptime をご覧ください。 strftimeで生成された時刻/日付を解析できます。

ドキュメントからの例:

<?php
$format = '%d/%m/%Y %H:%M:%S'; $strf = strftime($format);

echo "$strf\n";

print_r(strptime($strf, $format));
?>

上記の例では、次のようなものが出力されます。

03/10/2004 15:54:19

Array (
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)
0
knittl

(PHP 5> = 5.3.0、PHP 7):

次のコマンドでDateTimeインスタンスを取得できます。

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

そしてそれをタイムスタンプに変換します:

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