2

私のコード

$time = "Tuesday, 26 June 2012";
//str_replace(',','',$time);<--this also doesn't work.
$a = strptime($time, "%l, %j %F %Y");
$stmp = mktime(0,0,0,$a['tm_mon'],$a['tm_mday'],$a['tm_year'],0);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp; //Tuesday, 30 November 1999 00:00:00

これで、実際に機能する、よりエレガントな方法があることがわかりました。

$time = "Tuesday, 26 June 2012";
$stmp = strtotime($time);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;//Tuesday, 26 June 2012 00:00:00

しかし、最初のバージョンの何が問題なのですか? 私はただ興味があります。

4

4 に答える 4

4

問題#1

$a = strptime(time, "%l, %j %F %Y");

あなたが書きましたtime; である必要があります$time

問題#2

フォーマット文字列が間違っています。strptimeと同じフォーマット文字列を使用せずdate、前にパーセント記号を付けただけです。独自のセットがあります。フォーマット文字列は次のようになります。

$a = strptime($time, "%A, %e %B %Y");

問題#3

  • strptime1900年からの年数を返します。を追加する必要があります1900
  • strptime0 から 11 までの月を返します。追加する必要があります1

すべてまとめて

修正されたコードは次のとおりです。

<?php
$time = "Tuesday, 26 June 2012";
$a = strptime($time, "%A, %e %B %Y");

$stmp = mktime(0, 0, 0, $a['tm_mon'] + 1, $a['tm_mday'], 1900 + $a['tm_year'], 0);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;
?>

万歳、うまくいきます!

于 2012-06-24T20:04:33.423 に答える
2

mktime関数の最後の0を削除する必要がありますが、正しく削除する必要があります。

$time = "Tuesday, 26 June 2012";
$a = strptime($time, "%A, %e %B %Y");

$stmp = mktime(0, 0, 0, $a['tm_mon'] + 1, $a['tm_mday'], 1900 + $a['tm_year']);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;
于 2012-06-24T20:19:41.000 に答える
1

$time の形式が間違っています。"%A, %e %B %Y" のはずです。

$a を var_dump すると、

array(9) {
  ["tm_sec"]=>
  int(0)
  ["tm_min"]=>
  int(0)
  ["tm_hour"]=>
  int(0)
  ["tm_mday"]=>
  int(26)
  ["tm_mon"]=>
  int(5)
  ["tm_year"]=>
  int(112)
  ["tm_wday"]=>
  int(2)
  ["tm_yday"]=>
  int(177)
  ["unparsed"]=>
  string(0) ""
}

ドキュメントを見ると、返された実際の値がわかります。

"tm_sec"    Seconds after the minute (0-61)
"tm_min"    Minutes after the hour (0-59)
"tm_hour"   Hour since midnight (0-23)
"tm_mday"   Day of the month (1-31)
"tm_mon"    Months since January (0-11)// increment month
"tm_year"   Years since 1900// add years from 1900
"tm_wday"   Days since Sunday (0-6)
"tm_yday"   Days since January 1 (0-365)
"unparsed"  the date part which was not recognized using the specified format

mktime に渡された実際の値を見つけたら、mktime に渡された値を調整してこれを修正します。

<?
$time = "Tuesday, 26 June 2012";
$a = strptime($time, "%A, %e %B %Y");
var_dump($a);
$stmp = mktime(0, 0, 0, $a['tm_mon'] + 1, $a['tm_mday'], 1900 + $a['tm_year']);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;
?>
于 2012-06-24T20:34:43.590 に答える
0

まあstrptime()時代遅れだから!

PHPドキュメントから:(PHP 5 >= 5.1.0)

だからあなたは使うべきstrtotime()です...

于 2012-06-24T20:08:22.283 に答える