PHP で今日の深夜のタイムスタンプを取得するにはどうすればよいでしょうか。たとえば、月曜日の午後 5 時で、月曜日 (今日) の深夜 (午前 12 時) のタイムスタンプを取得したいとします。これはすでに発生しています。
ありがとう
ベストアンサー1
$timestamp = strtotime('today midnight');
または日付時刻:
$date = new DateTime('today midnight');
// or: $date = date_create('today midnight');
$timestamp = $date->getTimestamp();
そしておそらく不変である:
$midnight = new DateTimeImmutable('today midnight');
// or: $midnight = date_create_immutable('today midnight');
$timestampOfMidnight = $midnight->getTimestamp();
- それはデフォルトのタイムゾーン。
- ネタバレ: 「
midnight
」または「today
」のみでは同じ結果が返されます。 UTC today
常に使用するには、タイムゾーン (例: " ") を追加します。- ネタバレ#2: UTC の挨拶スタイル: "
midnightZ
" - 歴史:
midnight
以来PHP5.1.2 より(2006年1月)today
以来PHP4.3.1 より(2003年2月)
その他の例:
時間が与えられれば2020-01-01 00:00:00 UTC:
UTC time is ............: [red ] 1577836800
を呼び出すとstrtotime($)
、結果は次のようになります。
today midnight .........: [pink ] 1577833200
midnight ...............: [pink ] 1577833200
today ..................: [pink ] 1577833200
tomorrow ...............: [green ] 1577919600
UTC today ..............: [red ] 1577836800
today Z ................: [red ] 1577836800
Asia/Shanghai today ....: [lime ] 1577808000
Asia/Shanghai ..........: [blue ] 1577811600
HKST today .............: [copper] 1577804400
オンラインデモ:https://3v4l.org/KWFJl
PHP ドキュメント:
上の相対フォーマットページをご覧ください日数ベースの表記表。これらの形式は
strtotime()
、DateTime
そしてdate_create()
。PHP が提供するその他の機能について見てみましょう。日付時刻- PHP の日付と時刻に関連する関数とオブジェクトへのエントリ ページ。他の日付と時刻に関連する拡張機能へのリンクも含まれています。
注記:「midnight
」は技術的には間today
2 日目、 PHP の「 」(一日の始まり)ですstrtotime
。
議論:
これまでのところ、答えstrtotime("today midnight")
または はPHP にとって完全で適切な答えですが、と同じ結果を返すのでstrtotime("midnight today")
少し冗長に見えるかもしれません。strtotime("midnight")
strtotime("today")
しかし、より詳細に説明しても、必ずしも真夜中についてであるかどうかという質問に即座に答えられるとは限りません。一日の始まりまたは深夜一日の終わり今日も文脈として与えられています。読むときに一日の始まりについて考えてみましょう「今日の真夜中」しかし、これは仮定であり、正確ではなく、おそらく不可能です。ウィキペディア:
この問題については世界的に一致した見解はないものの、ほとんどの場合、真夜中は新しい一日の始まりとみなされ、00:00 という時刻に関連付けられます。
次のプログラミングの質問と比較してください。
- 真夜中は時間遷移
- 単一のUNIXタイムスタンプを要求する場合
- 答えはない
(これは 2 つの UNIX タイムスタンプの間なので、2 つのタイムスタンプを取得して、その 2 つの意味を説明することになりますが、これは単一のタイムスタンプを求めている質問に対する回答にはなりません)。
この不一致と UNIX Time が日付/時刻を参照する方法のため、これを完全に解決するのは簡単ではありません。
よく知られているデジタル24時間時計の時間と分を使って表現してみましょう。夜中(より正確でしょうか?):
$midnight = strtotime("today 00:00");
または一日の終わりの場合:
$midnight = strtotime("today 24:00");
(注: 翌日の開始として表示されます)
または12時間制の時計では、UNIX タイムスタンプの今日深夜:
$midnight = strtotime("12:00 a.m.");
(注:「真夜中の12時」strtotime()
表記は)ではサポートされていません
混乱は、移行時間のように夜中midnight
時計にマップすることは、12時間制の時計でより目立つようになるかもしれません。正午(PHPでは相対的な日付/時刻形式として利用できませんが、「noon
」)は技術的にはまた(現在は正午の 2 つの完全な日付の間、または 1 日の前半と後半の間)。
これらを合計すると、コードは 24 時間制で表示したり、単に「today midnight
」と書き出したりすると、あまり受け入れられない可能性があります。
あなたのマイレージは異なる場合があります。
これはある意味時刻。 からウィキペディア ミッドナイト:
「真夜中は移行時間ある日から次の日にかけて –一瞬とき日付の変更、特定の管轄区域の現地の公式時計の時刻に基づきます。時計の時刻では、真夜中は正午の反対で、12 時間異なります。[太字は私による]"
そして、Wikipedia 12時間時計:
「「12:00 am」と「12:00 pm」が何の時刻を表すかは、必ずしも明確ではありません。ラテン語の meridies (正午)、ante (前)、post (後) から、ante meridiem (am) は正午の前を意味し、post meridiem (pm) は正午の後を意味します。「正午」(正午、meridies (m.)) は前でも後でもないため、am と pm という用語は適用されません。正午を表す方法として「12 m.」が提案されましたが、これはめったに行われず、真夜中を表す方法の問題も解決しません。」