web-dev-qa-db-ja.com

日付フォーマットの変換yyyy-mm-dd => dd-mm-yyyy

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

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

436
matthy

strtotime()date()を使います。

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

(PHPサイトの strtotime および date のドキュメントを参照してください。)

これは元の質問に対する素早い解決策であることに注意してください。もっと広範囲の変換のために、あなたは本当に DateTime クラスをパースしフォーマットするために使うべきです:-)

960
richsage

もし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の形式を指定しています。

またはsource-formatが常に "Y-m-d"(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
?>
249
ceiroa

つかいます:

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

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

68
Tim Lytle
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

このコードはすべての日付フォーマットに対して機能します。

あなたはあなたの古い日付フォーマットのためにそのような$ 3- $ 1- $ 2のような置換変数の順序を変えることができます。

33
Alper Sarı

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

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

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

26
Gabriel
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

詳しくは、 strtotime のドキュメントを参照してください。

あるいはもっと短く:

$new_date = date('d-m-Y', strtotime(your date variable));
26
Kevin

:この投稿の回答は支持されることがあるので、それ以上支持しないようにと親切にお願いします。私の答えは古く、技術的には正しくありません。ここにはいくつかの優れたアプローチがあります。私は歴史的な目的のためだけにそれをここに保管しています。

ドキュメンテーションはstrtotime関数については十分に説明していませんが、@ rjmunroは彼のコメントで問題を正しく対処しました。それはISOフォーマットの日付 "YYYY-MM-DD"です。

また、Date_Converter関数がまだ機能する可能性があるとしても、以下の不正確なステートメントがあるかもしれないことを警告したいので、それらを無視してください。

最も投票された回答は実際には正しくありません。

PHP要約マニュアル ここ には、「この関数には英語の日付フォーマットを含む文字列が与えられることが想定されています」と書かれています。 それが実際に意味するものはそれがアメリカの日付形式を期待するということです、例えば "m-d-Y"または "m/d/Y"。

つまり、 "Y-m-d"として指定された日付は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
17
Igor Donin

これを実装する方法は2つあります。

1。

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

2。

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');
14
Raja Ram T

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

9
Sinan

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

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);
}
8
Juancho Ramone

下記はPHPコードで、mktime()を使って明日の日付を生成し、そのフォーマットを dd/mm/yyyy フォーマットに変更してからechoを使って出力します。

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
7
Vishnu
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
5
AbdulBasit

この特定の変換には、フォーマット文字列を使うこともできます。

$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));

明らかにこれは他の多くの日付フォーマット変換にはうまくいきませんが、この場合は部分文字列を並べ替えるだけなので、これを行うためのもう1つの方法があります。

0
Don't Panic

簡単な方法strtotime()date()を使う:

$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));

時間とともに

$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
0
Sani Kamal