PHPで日付形式を変換する


489

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

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


21
dd-mm-yyyyは、少なくともユーザーにデータを表示する必要がある場合、ヨーロッパの(ほとんどの)標準形式です。
Matteo Riva

7
オーストラリアとニュージーランドでもdd-mm-yyyy
ジョナサンデイ

2
米国ではmm-dd-yyyy。@stesch:前者はSQLの標準です。どの国でも標準であるかどうかはわかりません。:)
ハーバート

10
実際、標準ISO 8601によるとyyyy-mm-dd です。
Jezen Thomas

7
グローバルな「標準」はyyyy-mm-ddであり、可能な限りシステムで常に使用する必要があります。注文日、月、年は世界のほとんどの国(米国を除く)で使用されますが、通常はハイフンではなくスラッシュを使用します。混乱を避けるため、私はYYYY-MM-DDをハイフンで区切るだけです。スラッシュで区切るその他の日付形式。これにより、一貫性が保たれます。
rjmunro

回答:


1056

使用strtotime()してdate()

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

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

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


14
mySQLからこの日付0000-00-00を取得した場合はどうなりますか?1969/12/31のような間違った日付を返します...
Enrique

3
@Enrique:MySQLから000-00-00を取得した場合、変換を行う前に最初にそのテストを行う必要があります。シンプル。
ShadowStorm

1
@SobinAugustine et al:strtotime()は、日付文字列を「Unixタイムスタンプ(1970年1月1日00:00:00 UTCからの秒数)」に変換し、date()が理解して変換できる形式です。したがって、これは1970
。– Samuel Lindblom 2014年

1
@SamuelLindblomいいえ、そのないというように、それは前に1970年に動作します
Sobinオーガスティン

1
@SobinAugustine:その通りです。ただし、1901年12月14日までは機能しないため、上記の日付が機能しない理由にも適用されます。
サミュエルリンドブロム2014年

271

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が常に "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
?>

17
いただきありがとうございますDateTime::createFromFormat()-それはより実際より有用であるstrtotime()
GTX

2
注意:最初の2つの方法にはPHP 5.3+が必要です。
Salman von Abbas

新しいDateTimeオプションをありがとうございます。それは機能し、非常にクリーンなオプションでした。
Nina Morena 2014

1
strtotime()真の型フォーマット(Ymd)を他のフォーマットに変換するのに便利DateTime::createFromFormat()ですが、普遍的です。STR_TO_DATEMySQL のようなものです
タロンサリベキ

これは、Bullshitの代わりに本当にうまくいったstrtotime()
コードクッカー

72

使用する:

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

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


うん、あなたが私が信じているものを提出したときに答えた。もちろん、strtotimeで見つかったエラーチェックは、何か役に立つかもしれません。
Tim Lytle

2
米国以外の日付形式の変換に役立ちました... dd-mm-yyyy => yyyy-mm-dd php.net/manual/en/datetime.formats.date.phpを
Chris Jacob

5
この回答の票数が少ない理由を理解しないでください。それはトップ投票の答えでなければなりません。問題なく簡単かつ迅速に問題を解決します。ありがとう
Naeem Ul Wahhab

2
日付形式を元の形式に戻す必要がある場合は、再度呼び出すこともできます。確かにベストアンサー。:)
Pedro Araujo Jorge 14年

1
これは、受け入れられた回答として変更する必要があります。これにより、日付と日付の形式を使用する場合のすべての日時の問題が解決されます。
Matteo Bononi 'peorthyr'

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

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

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


どうもありがとうございました!
Lêヴァンチェン

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

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

またはさらに短い:

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

27

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

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

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


1
私たちのアプリケーションでは、フィールド(日、月、年)のいずれかが不明な場合、人々は「99」を入力するため、これを使用することになりました。データに「偽の」日付がある場合は、適切な方法です。
Voodoo

18

:この投稿の回答は賛成されることもあるので、もう反対しないようにお願いしました。私の答えは古くからあり、技術的に正しいわけではありません。ここにはいくつかのより良いアプローチがあります。ここでは、歴史的な目的でのみ保持しています。

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

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

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

ここでのPHP strtotimeマニュアルは、「関数には英語の日付形式を含む文字列が与えられることを期待している」と記載されています。それが実際に意味することは、「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

2
先を読んで、私はCeiroaの修正が好きです。これは、日付を分解するより簡単です。
Igor Donin 2012

3
一番上の答えは不正確ではありません。PHPはISO形式の日付 "YYYY-MM-DD"で正しいことを行います。先頭に4桁があり、区切り記号として/ではなく-を使用しているため、米国の日付として誤って解釈することはできません。ISOの日付は、他の形式と混同しないように注意深く設計されています。
rjmunro 2014年

14

これを実装するには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');


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);
}

7

以下に、明日の日付を使用して生成しmktime()、その形式をdd / mm / yyyy形式に変更してからを使用して出力するPHPコードを示しますecho

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);

5
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));

1
Mysqlの場合、日付の形式は「2014-04-26」のようなYmdです
AbdulBasit

2

date()およびstrtotime()を使用して形式を変更できます。

$ date = '9/18/2019';

echo date( 'dm-y'、strtotime($ date));

結果:

18-09-19

(dmy)を変更することで形式を変更できます。


1

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

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

明らかにこれは他の多くの日付形式変換では機能しませんが、この場合は部分文字列を並べ替えるだけなので、これは別の可能な方法です。


2019-10-28T17:02:49Zをタイムスタンプに変換する方法は?
ボグダンボグダノフ


1
    function dateFormat($date) {
        $m = preg_replace('/[^0-9]/', '', $date);
        if (preg_match_all('/\d{2}+/', $m, $r)) {
        $r = reset($r);
            if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
            if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
            if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
            if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
        }
    }

var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31

0

簡単な使い方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

使用date_createしてdate_format

これを試して。

function formatDate($input, $output){
  $inputdate = date_create($input);
  $output = date_format($inputdate, $output);
  return $output;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.