web-dev-qa-db-ja.com

PHP日付形式dd / mm / yyyyを変換=> yyyy-mm-dd

可能性のある複製:
PHP日付文字列形式

dd/mm/yyyy => yyyy-mm-ddから日付を変換しようとしています。 mktime()関数と他の関数を使用していますが、機能させることができません。 '/'を区切り文字として使用して、元の日付をexplodeに管理できましたが、形式を変更し、'/''-'と交換することに成功していません。

どんな助けも大歓迎です。

73
Daniel Mabinko

m/d/yまたはd-m-y形式の日付は、さまざまなコンポーネント間の区切り文字を調べることで明確になります。区切り文字がスラッシュ(/)の場合、アメリカのm/d/yが想定されます。一方、区切り文字がダッシュ(-)またはドット(.)の場合、ヨーロッパのd-m-y形式が想定されます。 こちら を確認してください。

デフォルトの日付関数を使用します。

$var = "20/04/2012";
echo date("Y-m-d", strtotime($var) );

EDIT私はそれをテストしましたが、どういうわけかPHPはdd/mm/yyyy形式ではうまく機能しません。別のソリューションがあります。

$var = '20/04/2012';
$date = str_replace('/', '-', $var);
echo date('Y-m-d', strtotime($date));
215
hjpotter92

使用してみてください DateTime::createFromFormat

$date = DateTime::createFromFormat('d/m/Y', "24/04/2012");
echo $date->format('Y-m-d');

出力

2012-04-24

編集:

日付が2010年5月4日(両方ともD/M/YYYYまたはDD/MM/YYYY)の場合、2010年5月4日から2010-4-5(両方ともYYYY-MM-DDまたはYYYY-MD)形式。

$old_date = explode('/', '5/4/2010'); 
$new_data = $old_date[2].'-'.$old_date[1].'-'.$old_date[0];

出力:

2010-4-5
83
Baba

Date()を使用しない別のソリューションを次に示します。それほど賢くない:)

$var = '20/04/2012';
echo implode("-", array_reverse(explode("/", $var)));
30
tosin

これを行う:

date('Y-m-d', strtotime('dd/mm/yyyy'));

ただし、「dd/mm/yyyy」が実際の日付であることを確認してください。

3
honyovk

私は素晴らしい答えを見ることができるので、ここで繰り返す必要はないので、いくつかのアドバイスを提供したいと思います。

内部で時間を処理するために、人間が読める日付形式の代わりにUnix Timestamp整数を使用し、PHPのdate()関数を使用して、ユーザー表示用にタイムスタンプ値を人間が読める日付形式に変換することをお勧めします。これがどのように行われるべきかの大雑把な例です:

// Get unix timestamp in seconds
$current_time = date();

// Or if you need millisecond precision

// Get unix timestamp in milliseconds
$current_time = microtime(true);

次に、アプリで必要に応じて$current_timeを使用し(ストア、加算、または減算など)、ユーザーに日付値を表示する必要がある場合は、date()を使用して目的の日付形式を指定できます。

// Display a human-readable date format
echo date('d-m-Y', $current_time);

これにより、日付はコンパクトでタイムゾーンに依存せず(常にUTCで)、プログラミング言語とデータベースで広くサポートされている標準化された形式(Unix Timestamp)になるため、日付形式、変換、およびタイムゾーンを扱う大きな頭痛の種を回避できます。

1