日付をyyyy-mm-dd
からdd-mm-yyyy
(SQLではなく)に変換しようとしています。ただし、日付関数がタイムスタンプを必要とする方法がわからないため、この文字列からタイムスタンプを取得できません。
これはどのようにして可能ですか?
日付をyyyy-mm-dd
からdd-mm-yyyy
(SQLではなく)に変換しようとしています。ただし、日付関数がタイムスタンプを必要とする方法がわからないため、この文字列からタイムスタンプを取得できません。
これはどのようにして可能ですか?
回答:
使用strtotime()
してdate()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(PHPサイトのstrtotimeと日付のドキュメントを参照してください。)
これは元の質問に対する迅速な解決策であったことに注意してください。より広範な変換を行うには、実際にDateTime
クラスを使用して解析およびフォーマットする必要があります:-)
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
?>
DateTime::createFromFormat()
-それはより実際より有用であるstrtotime()
strtotime()
真の型フォーマット(Ymd)を他のフォーマットに変換するのに便利DateTime::createFromFormat()
ですが、普遍的です。STR_TO_DATE
MySQL のようなものです
strtotime()
使用する:
implode('-', array_reverse(explode('-', $date)));
日付変換のオーバーヘッドがなければ、それが多くの問題になるかどうかはわかりません。
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
詳細については、のドキュメントをstrtotime
参照してください。
またはさらに短い:
$new_date = date('d-m-Y', strtotime(your date variable));
注:この投稿の回答は賛成されることもあるので、もう反対しないようにお願いしました。私の答えは古くからあり、技術的に正しいわけではありません。ここにはいくつかのより良いアプローチがあります。ここでは、歴史的な目的でのみ保持しています。
ドキュメントでは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
strftime()
機能を試すことができます。簡単な例:strftime($time, '%d %m %Y');
この関数を使用して、任意の形式から任意の形式に変換します
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);
}
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
この特定の変換では、フォーマット文字列を使用することもできます。
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
明らかにこれは他の多くの日付形式変換では機能しませんが、この場合は部分文字列を並べ替えるだけなので、これは別の可能な方法です。
strtotime()
ます。:-)
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