PHPで日付形式を変換する

2010年03月22日に質問されました。  ·  閲覧回数 1.7M回  ·  ソース

matthy picture
2010年03月22日

日付をyyyy-mm-ddからdd-mm-yyyyに変換しようとしています(SQLではありません)。 ただし、日付関数にタイムスタンプが必要な方法がわかりません。また、この文字列からタイムスタンプを取得できません。

これはどのように可能ですか?

回答

richsage picture
2010年03月22日
1091

strtotime()date()ます:

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

(PHPサイトのstrtotimedateのドキュメントを参照してください。)

これは元の質問に対する迅速な解決策であったことに注意してください。 より大規模な変換を行うには、実際にはDateTimeクラスを使用して解析とフォーマットを行う必要があります:-)

ceiroa picture
2012年07月11日
280

strtotime変換を回避したい場合(たとえば、strtotimeが入力を解析できない場合)、次を使用できます。

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

または、同等に:

$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');

最初に$ dateStringの形式を指定します。次に、$ newDateStringの形式を指定します。

または、ソース形式が常に「Ymd」(yyyy-mm-dd)の場合は、 DateTimeを使用します。

<?php
    $source = '2012-07-31';
    $date = new DateTime($source);
    echo $date->format('d.m.Y'); // 31.07.2012
    echo $date->format('d-m-Y'); // 31-07-2012
?>
Tim Lytle picture
2010年03月22日
74

使用する:

implode('-', array_reverse(explode('-', $date)));

日付変換のオーバーヘッドがなければ、それがそれほど重要になるかどうかはわかりません。

Alper Sarı picture
2011年12月19日
39
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

このコードは、すべての日付形式で機能します。

古い日付形式により、$ 3- $ 1- $ 2などの置換変数の順序を変更できます。

Kevin picture
2010年03月22日
28
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

詳細については、 strtotime

またはさらに短い:

$new_date = date('d-m-Y', strtotime(your date variable));
Gabriel picture
2010年03月22日
28

また、別のあいまいな可能性:

$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];

私はそれを使うかどうかわかりませんが、それでも:)

Igor Donin picture
2012年08月07日
18

:この投稿の回答は時々賛成されるので、私はここに戻ってきて、もう賛成しないように人々にお願いしました。 私の答えは古く、技術的に正しくありません。ここにはいくつかのより良いアプローチがあります。 ここでは歴史的な目的のためだけに保管しています。

ドキュメントではstrtotime関数の説明が不十分ですが、@ rjmunroはコメントでこの問題に正しく対処しました。これは、ISO形式の日付「YYYY-MM-DD」です。

また、Date_Converter関数は引き続き機能する可能性がありますが、以下に不正確なステートメントがある可能性があることを警告したいので、無視してください。

最も投票された答えは実際には間違っています!

ここでのPHPstrtotimeマニュアル実際に意味するのは、「mdY」や「m / d / Y」などの米国の米国の日付形式を想定しているということです。

つまり、「Ymd」として指定された日付は、 strtotimeによって誤って解釈される可能性があります。 予想される形式で日付を指定する必要があります。

日付をいくつかの形式で返す小さな関数を作成しました。 自由に使用および変更できます。 誰かがそれをクラスに変えたら、それが共有されれば嬉しいです。

function Date_Converter($date, $locale = "br") {

    # Exception
    if (is_null($date))
        $date = date("m/d/Y H:i:s");

    # Let's go ahead and get a string date in case we've
    # been given a Unix Time Stamp
    if ($locale == "unix")
        $date = date("m/d/Y H:i:s", $date);

    # Separate Date from Time
    $date = explode(" ", $date);

    if ($locale == "br") {
        # Separate d/m/Y from Date
        $date[0] = explode("/", $date[0]);
        # Rearrange Date into m/d/Y
        $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
    }

    # Return date in all formats
        # US
        $Return["datetime"]["us"] = implode(" ", $date);
        $Return["date"]["us"]     = $date[0];

        # Universal
        $Return["time"]           = $date[1];
        $Return["unix_datetime"]  = strtotime($Return["datetime"]["us"]);
        $Return["unix_date"]      = strtotime($Return["date"]["us"]);
        $Return["getdate"]        = getdate($Return["unix_datetime"]);

        # BR
        $Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
        $Return["date"]["br"]     = date("d/m/Y", $Return["unix_date"]);

    # Return
    return $Return;

} # End Function
Raja Ram T picture
2014年05月20日
16

これを実装するには、次の2つの方法があります。

1.1。

    $date = strtotime(date);
    $new_date = date('d-m-Y', $date);

2.2。

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');
Sinan picture
2010年03月22日
9

strftime()関数を試すことができます。 簡単な例: strftime($time, '%d %m %Y');

Juancho Ramone picture
2015年09月30日
8

この関数を使用して、任意の形式から任意の形式に変換します

function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
    $date_aux = date_create_from_format($from_format, $date);
    return date_format($date_aux,$to_format);
}