0

次の例を確認してください。

$date1 = strtotime("tomorrow 4:00 PM");
$date2 = strtotime("16:00:00");
$date3 = strtotime("10 hours");
$date4 = strtotime("+1 day");

echo date("Y m d H:i:s",$date1)."<br>";
echo date("Y m d H:i:s",$date2)."<br>";
echo date("Y m d H:i:s",$date3)."<br>";
echo date("Y m d H:i:s",$date4)."<br>";

以下のような出力が得られます。

2013 06 10 16:00:00
2013 06 09 16:00:00
2013 06 09 20:50:25
2013 06 10 10:50:25

最初の 2 つの例 ($date1 と $date2) を絶対データとして、最後の 2 つを相対日付として考えています。さて、$date1/$date2/$date3/$date4 変数が与えられただけで、それが相対時間か絶対時間かを言うことは可能ですか?

私は別のスレッドで解決策を得ました: PHP 日時文字列の微分 しかし、それは機能しない 2 番目の例 (絶対値としての $date2) を検討するまで機能しました。また、正規表現のチェックに提案されるかもしれませんが、それも信頼できるようには見えません。

私は、phpが関数またはDateTimeオブジェクトからこれを伝える統合された方法を持っているかどうか疑問に思っていました. 探しましたが、何も見つかりませんでした。

あなたの提案/フィードバック/可能な解決策を聞くのを楽しみにしています. ありがとう。

4

2 に答える 2

2

私の知る限り、直接的な方法はありませんが、関数の2番目のパラメーターで使用できるトリックがありstrtotimeます。

function is_absolute_time($time_string) {
  $time_shift = time() + 60; // 1 min from now

  $time_normal = strtotime($time_string);
  $time_shifted = strtotime($time_string, $time_shift);

  return $time_normal == $time_shifted;
}

論理的根拠は単純です。時間が絶対的なものである場合、1 分の違いはstrtotime両方による計算を変更せず、同じ$time_normal$time_shiftedなります。ただし、相対時間の場合、差は 1 分 ($time_shift変数の値) になります。

ただし、このコードには注意点があります。この関数はFALSE、真夜中から 1 分未満の絶対時間 (ただし、絶対日付ではない) に対しても返されます。次のように変更することで、これを最小限に抑えることができます$time_shift

$time_shift = time() + 5; // 5 seconds from now.

このコードは、午前 0 時から 5 秒まで正常に機能するようになりました。安全に 2 まで下げることができると思います。将来 1 秒が機能しない可能性があるエッジ ケースがあります。

この問題を完全に解決するには、別のアプローチを試すことができます。

function is_absolute_time($time_string) {
  $epoch = 0; // Epoch
  $time_shift = 60; // 1 min from epoch

  $time_normal = strtotime($time_string, $epoch);
  $time_shifted = strtotime($time_string, $time_shift);

  return $time_normal == $time_shifted;
}

この最後の解決策を直接試すことができます。この投稿全体を通して、解決策の理由を構築しているだけです。

于 2013-06-09T05:25:52.220 に答える
0

値だけを考えると2013 06 10 16:00:00、答えは単純です。それは絶対的なものです。この絶対タイムスタンプが「絶対」タイムスタンプとして作成されたのか、別の日付との関係に基づいて作成されたのかはわかりません。あなたが持っているのは「2013 06 10 16:00:00」だけです。「残留相対性」やそのようなものはまだありません。

これでさえ、キリストの誕生と考えられていることに関連していますが、これはビッグバン以来、宇宙に浮かんでいる地球に関連しています... *trollface*

于 2013-06-09T06:24:27.800 に答える