0

現在の日付に数日を追加したいのですが、次のコードを使用します。

$arrSearchValues=1000;

$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));

日数が 9070 を超えるまで、すべてが完璧に機能しています。この問題を克服する方法はありますか?例を教えてください

4

3 に答える 3

2

2038年1月19日は特別な日です。その日、 Unix時間 に基づく32ビットの日付/時刻の実装では、日付と時刻を表すビットが不足します。そのため、追加がオーバーフローし、結果が最初にリセットされます。 Unixエポック(1970年1月1日)。

この制限を回避するには、withandfriendsに切り替えDateTimeます。

$d = new DateTime();
$d->modify("+10000 days");
echo $d->format("Y-m-d");
于 2013-03-20T08:57:35.433 に答える
2

http://php.net/manual/en/function.strtotime.phpによると

タイムスタンプの有効な範囲は通常、1901 年 12 月 13 日金曜日 20:45:54 UTC から 2038 年 1 月 19 日火曜日 03:14:07 UTC までです。(これらは、32 ビット符号付き整数の最小値と最大値に対応する日付です。)

9070 日後、有効なタイムスタンプを取得していないため、タイムスタンプが範囲外になり、エラーが発生します

有効なタイムスタンプでない場合はエラーを表示できます

$arrSearchValues = 1000;
if(strtotime("+$arrSearchValues days"))
{
   $datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
}
else
{
    echo "Out of range";
}
于 2013-03-20T08:57:10.903 に答える
0

これを試してみてください。これが最速の方法である必要があります。

$arrSearchValues=time()+1000*24*60*60;
$datToDate = date('Y-m-d', $arrSearchValues);

申し訳ありませんが、time() を使用するのを忘れていました。更新されたコードを確認してください。

于 2013-03-20T08:56:47.383 に答える