1

php mktime()、32ビットシステム、および<1901または> 2038年に問題があることを理解していますが、私の質問は、64ビットシステムで動作している場合でもこの問題は残るのでしょうか?

ここに記載されているコードを使用して、ホストが64ビットシステムを実行していることを確認しました。

次の形式でユーザー入力から日付を収集しています。

$ m =ユーザーが選択した月(2桁)。$ d =ユーザーが選択した日(2桁)。$ y =ユーザーが選択した年(4桁)

入力日付をUNIXタイムスタンプに変換するために使用しているコードは次のとおりです。

$npt_date=mktime(0,0,0,$m,$d,$y);

そして、基本形式xx-xx-xxxxで日付を再表示するコード

$date_str=date('m-d-Y',$npt_date);

コードは1901を超える日付では正常に機能しますが、$ y <1901の場合、date()関数からの出力は誤った日付を返します。

mktime()およびdate()関数を使用してこれが可能である場合、および/または可能な回避策について、私が間違っていることに関するアドバイスをいただければ幸いです。

前もって感謝します。

4

2 に答える 2

1

を使い始めるのは良い考えかもしれませんDateTime。それは1000年までに限られたバックワードだけです。
またtime()date()将来的には2038年までに制限されますが、DateTime将来的にも問題はありません。これがトピックに関するいくつかの読み物
です。

于 2012-10-16T07:26:07.777 に答える
0

おそらく、より最近の日付を格納している場合は、1バイトに正確に収まる256を超える可能な年の値は必要ありません。これにより、スペースを大幅に節約できます。複数のバイトを使用して整数1901を格納するのではなく、多くの場合、1900年は冗長と見なすことができますが、MySQLは内部でそれを単なる数値1として扱い、1901に表示します。

さらに年数が必要な場合は、INTベースのタイプを使用してください。

これも参照してくださいMySQLは履歴日付(1200など)をサポートしていますか?

于 2012-10-16T07:33:57.200 に答える