18

データベースからのデータを 2 桁の年形式で取得しています。これを次のコードに13変換しようとしています...2013

$result = '13';

$year = date("Y", strtotime($result));

しかし、それは1969年に戻った

どうすればこれを修正できますか?

4

11 に答える 11

29
$dt = DateTime::createFromFormat('y', '13');
echo $dt->format('Y'); // output: 2013

69になり2069ます。70になり1970ます。そのようなルールで問題ない場合はそのままにしておきます。それ以外の場合は、独自のルールに従って独自の世紀データを先頭に追加します。

于 2013-06-10T18:27:24.550 に答える
12

含まれていない重要な情報は次のとおりです。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;

やってみて。これは、モジュロ関数 (% を含むビット) を使用して、基準年からのオフセットを計算します。

于 2013-06-10T18:57:11.153 に答える
10
$result = '13';

$year = '20'.$result;

if($year > date('Y')) {
   $year = $year - 100;
}

//80 will be changed to 1980
//12 -> 2012
于 2013-06-10T18:27:17.687 に答える
2

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');
于 2013-06-10T18:28:44.053 に答える
1

問題は strtotime にあります。strtotime("now") で同じことを試してください。

于 2013-06-10T18:26:43.547 に答える
1

文字列 "20" を手動で前に追加 (先頭に追加) するだけです。

$result = '13';
$year = "20".$result;
echo $year; //returns 2013
于 2013-06-10T18:27:15.877 に答える
1

これはばかげているかもしれませんが、簡単な修正は次のとおりです。

$result = '13';
$result = '1/1/20' . $result;
$year = date("Y", strtotime($result)); // Returns 2013

または、次のようなものを使用できます。

date_create_from_format('y', $result);
于 2013-06-10T18:27:30.427 に答える
1

フォーマットを指定して日付オブジェクトを作成できますdate_create_from_format()

http://www.php.net/manual/en/datetime.createfromformat.php

$year = date_create_from_format('y', $result);

echo $year->format('Y')
于 2013-06-10T18:28:09.697 に答える
0

私は初心者のハックで、このコードがかなり長いことを知っています。問題の解決策を探していたときに、あなたの質問に出くわしました。私は 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; 
于 2014-04-20T21:10:35.940 に答える