0

間違った日付を出力するコードの問題は何ですか?

$date = "1990-05-07"; // Y-m-d
$date1 = date("d/m/Y", strtotime($date)); // Here is fine.
$date2 = date("Y-m-d", strtotime($date1)); // Here is wrong.

echo $date2; // output: 1990-07-05

上記のコードは簡単なデモンストレーションです。正確なコードは次のとおりです: (Yii フレームワーク)

Model.php

public function afterFind()
{
    if ($this->birthday)
    {
        $this->birthday = date("d/m/Y", strtotime($this->birthday));
    }
}

public function beforeSave()
{
    if ($this->birthday)
    {
        $this->birthday = date("Y-m-d", strtotime($this->birthday));
    }
}
4

4 に答える 4

2

$date「1990-05-07」から「07/05/1990」に変更しているためです。Y-m-dからに変更しましd/m/Yた。パーサーはこれを として認識していm/d/Yます。最初の日付の呼び出しの結果を再利用することはできません。これは、思い通りに解析されないためです

解決策 1 (最適)

元の日付から解析したタイムスタンプを再利用すると、元のタイムスタンプが台無しになることはありません。

$date = "1990-05-07"; // Y-m-d
$timestamp = strtotime($date);
$date1 = date("d/m/Y", $timestamp);
$date2 = date("Y-m-d", $timestamp);
echo $date1 . " ; " . $date2;

解決策 2 (これも良い)

@PragneshChauhanが私の投稿を編集するために私を打ち負かしたので、@PragneshChauhanが言ったようにしてください。

解決策 3 (理想的ではない)

$dateへの呼び出しの間にリセットするdate()と、正常に動作します。

$date = "1990-05-07"; // Y-m-d
$date = date("d/m/Y", strtotime($date));
echo $date; // output: 07/05/1990

echo "\n";

$date = "1990-05-07"; // Y-m-d
$date = date("Y-m-d", strtotime($date));
echo $date; // output: 1990-05-07

概念実証: http://codepad.org/JnVpDFb7

于 2012-11-07T06:23:33.780 に答える
1

次のように使用することもできます。

<?php
  $date = "1990-05-07"; // Y-m-d
  $date_ex=explode("-",$date);
  $date1=mktime(0,0,0,$date_ex[1],$date_ex[2],$date_ex[0]);

  $date=date("d/m/Y",$date1);
  $date=date("Y-m-d",$date1);

//echo $date = date("d/m/Y", strtotime($date)); // Here is fine.
//echo $date = date("Y-m-d", strtotime($date)); // Here is wrong.

echo $date; // output: 1990-07-05
  ?>
于 2012-11-07T06:33:01.260 に答える
0

「Vikas Umrao」を使用したソリューション ヒント:

public function afterFind()
{
    if ($this->birthday)
    {
        $birthday = explode("-", $this->birthday);
        $mktime = mktime(0,0,0,$birthday[1],$birthday[2],$birthday[0]);
        $this->birthday = date("d/m/Y",$mktime);
    }
}

public function beforeSave()
{
    if ($this->birthday)
    {
        $birthday = explode("/", $this->birthday);
        $mktime = mktime(0,0,0,$birthday[1],$birthday[0],$birthday[2]);
        $this->birthday = date("Y-m-d",$mktime);
    }
}
于 2012-11-07T08:37:41.617 に答える
0

試す

$date = "1990-05-07"; // Y-m-d
$date1 = date("d/m/Y", strtotime($date));
$date2 = date("Y-m-d", strtotime($date));
echo $date2; // output: 1990-07-05
于 2012-11-07T06:23:37.997 に答える