ホームページ > バックエンド開発 > PHPチュートリアル > strtotime 関数に関する非常に奇妙な問題

strtotime 関数に関する非常に奇妙な問題

WBOY
リリース: 2016-06-20 12:49:07
オリジナル
1023 人が閲覧しました

var_dump(strtotime('1441185010'));//输出bool(false)var_dump(strtotime('1451382400'));//输出int(13591003898)
ログイン後にコピー

不思議ですが、なぜこの 2 つの結果は異なるのでしょうか?


ディスカッションへの返信 (解決策)

私の PHP5.6 は、あなたの PHP のバージョンを示す 2 つの false を返します。

私の PHP5.6 は、あなたの PHP のバージョンを示す 2 つの false を返します。


私は PHP バージョン 5.3.3、centos6.4 64 ビット仮想マシンです。最初のものは正常に false を出力しますが、2 番目のものは間違っています。
問題の原因が本当に気になります

何に使いたいのかわかりません。
strtotime は、英語テキストの日付と時刻の記述を Unix タイムスタンプに解析します
echo strtotime('2015/12/11');
タイムスタンプを日付に変換したい場合は、date

何に使いたいのか分かりません。
strtotime は、英語テキストの日付と時刻の記述を Unix タイムスタンプに解析します
echo strtotime('2015/12/11');
タイムスタンプを日付に変換したい場合は、date



modifier.date_format.php
function smarty_modifier_date_format($string, $format="%b %e, %Y", $default_date=null){    if (substr(PHP_OS,0,3) == 'WIN') {           $_win_from = array ('%e',  '%T',       '%D');           $_win_to   = array ('%#d', '%H:%M:%S', '%m/%d/%y');           $format = str_replace($_win_from, $_win_to, $format);    }    if($string != '') {        return strftime($format, smarty_make_timestamp($string));    } elseif (isset($default_date) && $default_date != '') {        return strftime($format, smarty_make_timestamp($default_date));    } else {        return;    }}
ログイン後にコピー


shared.make_timestamp.php
function smarty_make_timestamp($string){    if(empty($string)) {        $string = "now";    }/** 这个判断是我做的一个临时救急解决方案,并没有找到实际原因。    if(strlen((int)$string)==10){        return (int)$string;    }*/    $time = strtotime($string);//此处在处理时间戳的时候发现问题里第一个时间戳正常返回false,但是第二个却返回一个不知道怎么得出来的整型,结果与$string不一致,结果自然不对    if (is_numeric($time) && $time != -1)        return $time;    // is mysql timestamp format of YYYYMMDDHHMMSS?    if (preg_match('/^\d{14}$/', $string)) {        $time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2),               substr($string,4,2),substr($string,6,2),substr($string,0,4));        return $time;    }    // couldn't recognize it, try to return a time    $time = (int) $string;    if ($time > 0)        return $time;    else        return time();}
ログイン後にコピー



Smarty テンプレートを使用しています時刻をフォーマットするときは、この {$aList[list].inputtime|date_format:"%Y-%m-%d %H:%M:%S"} を使用しますが、このときにエラーが発生します。エラーを追跡します。さらに、処理中に、smarty はタイムスタンプを文字列として直接処理し、処理のために関数に渡していることがわかりました。この関数は strtotime を使用して文字列を直接処理し、処理結果に応じて異なる値を返します。結果は部分的には正しく、部分的には間違っているようですが、タイム カットオフ ポイントは 2015-9-4 であるため、非常に奇妙です。

echo date('Y-m-d H:i:s', 1441185010); //2015-09-02 17:10:10
1441185010 が有効なタイムスタンプであることがわかります

strtotime -- 英語テキストの日付と時刻の記述を Unix タイムスタンプに解析します
$time = strtotime($string)
で、$string が英語のテキストの日付と時刻の記述ではない場合、それは当然間違っています
echo date('Y-m-d H:i:s', strtotime('20150902171010')) //2015-09-02 17:10:10
echo date('Y-m-d H:i); :s', strtotime('20150902')); //2015-09-02 00:00:00
1441185010 は 1441 年 8 月 50 日の 10:00 と解釈できますか? ? ? ?

echo date('Y-m-d H:i:s', 1441185010); //2015-09-02 17:10:10
1441185010 が有効なタイムスタンプであることがわかります。 🎜>
strtotime -- 英語テキストの日付と時刻の記述を Unix タイムスタンプに解析します
$time = strtotime($string)
で、$string が日付と時刻の記述ではない場合英語のテキストの場合、当然それは間違っています
echo date('Y-m-d H:i:s', strtotime('20150902171010')); //2015-09-02 17:10:10
echo date( 'Y-m-d H:i: s', strtotime('20150902')); //2015-09-02 00:00:00
1441185010 は 1441 年 8 月 50 日の 10:00 と解釈できますか? ? ? ?


echo date('Y-m-d H:i:s', 1451382400);
//出力 2015-12-29 17:46:40
echo date('Y-m-d H: i:s', strtotime('1451382400'));
//出力 2400-09-06 14:51:38

echo date('Y-m-d H:i:s', 1441185010); //2015-09-02 17:10:10

1441185010 が有効なタイムスタンプであることがわかります。

strtotime -- 英語テキストの日付と時刻の記述を Unix に解析します。 timestamp
$time = strtotime($string);
で、$string が英語のテキストの日付と時刻の記述ではない場合、当然間違っています
echo date('Y-m-d H:i: s', strtotime(' 20150902171010')); //2015-09-02 17:10:10
echo date('Y-m-d H:i:s', strtotime('20150902')); 09-02 00:00 :00
あなたの 1441185010 は 1441 年 8 月 50 日の 10:00 と解釈できますか? ? ? ?



私の場合は、strtotime の結果を使用して、タイムスタンプを直接返すか、通常の strtotime 処理で処理された時間を返すかを決定します。 timestamp は false を返しますが、私の場合、1441185010 などの一部は false を返しますが、1451382400 は false を返しません。

strtotime に渡すのはタイムスタンプなので false でなくても間違いです
echo date('Y-m-d H:i:s', 13591003898); //1992-05-17 19:26 : 50

strtotimeに渡すのはタイムスタンプなのでfalseでなくても間違いです
echo date('Y-m-d H:i:s', 13591003898) ; / /1992-05-17 19:26:50


司会者、よろしくお願いします。
前にも書きましたが、私の場合は直接出力するのではなく、strtotimeから返された結果を元に日付を使って出力します。

私の質問は、なぜ
strtotime('1441185010')
が false であるのかということです。

strtotime('1451382400')
は、理論的に言えば false ではないのです。 t strtotime (10 桁のタイムスタンプ) が false を出力しますか?

それはあなたの php に問題があります
テスト後、それはすべて誤りです

それはあなたの php に問題があります
テスト後、それはすべて誤りですfalse false



テストしたところ、確かに上記の問題はバージョン 5.3 で発生し、バージョン 5.4 では false になります。原因はわかりません。 ?

バージョン 5.2 にも上記の問題があります。これがバグなのかどうかはわかりません。

先生、この投稿を読んでください。 。 。 。 http://bbs.csdn.net/topics/391822092

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート