データベースからのデータを 2 桁の年形式で取得しています。これを次のコードに13
変換しようとしています...2013
$result = '13';
$year = date("Y", strtotime($result));
しかし、それは1969年に戻った
どうすればこれを修正できますか?
$dt = DateTime::createFromFormat('y', '13');
echo $dt->format('Y'); // output: 2013
69
になり2069
ます。70
になり1970
ます。そのようなルールで問題ない場合はそのままにしておきます。それ以外の場合は、独自のルールに従って独自の世紀データを先頭に追加します。
含まれていない重要な情報は次のとおりです。2 桁の年を 4 桁の年に変換する方法を教えてください。
たとえば、01/01/13 は 2013 年だと思いますが、01/01/23 はどうですか? それは2023年ですか?それとも1923年?それとも1623年?
ほとんどの実装では、100 年の期間が選択され、2 桁がその期間内の年を指すと想定されます。
最も単純な例: year は 2000 ~ 2099 の範囲です。
// $shortyear is guaranteed to be in range 00-99
$year = 2000 + $shortyear;
別の範囲が必要な場合はどうなりますか?
$baseyear = 1963; // range is 1963-2062
// this is, of course, years of Doctor Who!
$shortyear = 81;
$year = 100 + $baseyear + ($shortyear - $baseyear) % 100;
やってみて。これは、モジュロ関数 (% を含むビット) を使用して、基準年からのオフセットを計算します。
$result = '13';
$year = '20'.$result;
if($year > date('Y')) {
$year = $year - 100;
}
//80 will be changed to 1980
//12 -> 2012
DateTime
これには、クラス、特にを使用しDateTime::createFromFormat()
ます。
$result = '13';
// parsing the year as year in YY format
$dt = DateTime::createFromFormat('y', $result);
// echo it in YYYY format
echo $dt->format('Y');
問題は strtotime にあります。strtotime("now") で同じことを試してください。
文字列 "20" を手動で前に追加 (先頭に追加) するだけです。
$result = '13';
$year = "20".$result;
echo $year; //returns 2013
これはばかげているかもしれませんが、簡単な修正は次のとおりです。
$result = '13';
$result = '1/1/20' . $result;
$year = date("Y", strtotime($result)); // Returns 2013
または、次のようなものを使用できます。
date_create_from_format('y', $result);
フォーマットを指定して日付オブジェクトを作成できますdate_create_from_format()
http://www.php.net/manual/en/datetime.createfromformat.php
$year = date_create_from_format('y', $result);
echo $year->format('Y')
私は初心者のハックで、このコードがかなり長いことを知っています。問題の解決策を探していたときに、あなたの質問に出くわしました。私は HTML フォームにデータを入力し (4 桁の年を入力するのが面倒です)、DB に書き込みますが、(退屈させないため) 日付を 4 桁の年形式で保存したいと考えています。あなたの問題のちょうど逆です。
フォームは $date を 01/01/01 として返します (この単語を使用すべきではないことはわかっていますが、使用しました)。現在の年 ($yn) を特定し、比較します。何年入力しても今世紀なら20XXになります。しかし、89 のように 100 (今世紀) 未満である場合は、1989 年になります。そして、年が変わるにつれて、将来も機能し続けます。100年ずっと大丈夫。これがお役に立てば幸いです。
// $date を 2 つの文字列に分割
$datebegin = substr($date, 0,6);
$dateend = substr($date, 6,2);
// 現在の年の下 2 桁を取得する
$yn=date("y");
// 世紀を決定
if ($dateend > $yn && $dateend < 100)
{
$year2=19;
}
elseif ($dateend <= $yn)
{
$year2=20;
}
// 両方の文字列を 1 つに戻します
$date = $datebegin . $year2 . $dateend;