141

今日の深夜にphpでタイムスタンプを取得するにはどうすればよいですか。月曜日の午後5時で、月曜日(今日)の午前0時(午前12時)のタイムスタンプが必要だとします。

ありがとうございました

4

10 に答える 10

275
$timestamp = strtotime('today midnight');

またはDateTime経由:

$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();
  1. これはデフォルトのタイムゾーンです。
  2. ネタバレ:「midnight」または「」だけtodayが同じものを返します。
  3. 常にタイムゾーンを設定するには、「」などのタイムゾーンを追加しUTC todayます。
  4. ネタバレ#2:UTC挨拶スタイル: " midnightZ"
  5. 履歴:PHP 5.1.2(2006年1月)midnight以降、PHP 4.3.1(2003年2月)以降today

その他の例:

与えられた時間UTC2020-01-0100 :00:00 :

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が提供するその他の機能を確認することをお勧めします。https ://php.net/datetime-PHP の日時関連の関数およびオブジェクトへのエントリページと、他の日時関連の拡張機能へのリンク。


注:midnight」は技術的には2日間ですが、ここでは「today」(1日の始まり)とPHPを使用していstrtotimeます。

討論:

これまでのところ、答えはPHPの完全で適切な答えですが、少し冗長に見え、同じ結果を返す可能性がstrtotime("today midnight")あります。strtotime("midnight today")strtotime("midnight")strtotime("today")

しかし、より冗長であっても、それが1日の始まりの真夜中な のか、今日でも1日の終わりの真夜中なのか、という質問にすぐに答えられるとは限りません。「今日の真夜中」を読むときに一日の始まりを考えるかもしれませんが、これは仮定であり、正確ではなく、おそらくそうではありません。ウィキペディア

この問題には全会一致はありませんが、ほとんどの場合、真夜中は新しい日の始まりと見なされ、00:00に関連付けられます。

このプログラミングの質問と比較してください:

  • 与えられた真夜中は時間の移行です
  • 単一のUNIXタイムスタンプを要求する場合
  • それなら答えはありません

(これは2つのUNIXタイムスタンプの間にあるため、2つのタイムスタンプを取得し、2つの意味を説明します。これは、単一のタイムスタンプを要求するため、質問に答えません)。

この不一致とUNIXTimeが日付/時刻を参照する方法が原因で、これを完全に解決するのは簡単ではありません。

よく知られているデジタル24時間時計を時と分で表示し、真夜中を表現しましょう(より正確ですか?):

$midnight = strtotime("today 00:00");

または一日の終わりに:

$midnight = strtotime("today 24:00");

(注:翌日の開始として表示されます)

または、12時間制を使用して、今日のUNIXタイムスタンプ深夜に与えることもできます。

$midnight = strtotime("12:00 a.m.");

(注:「12midnight」表記はでサポートされていませんstrtotime()

真夜中のように時計にマッピングするための移行時間の結果として生じる可能性のある混乱は、「正午(PHPでは相対的な日付/時刻形式としては利用できませんが " ") 」と同様に、12時間制でさらに明らかになる可能性があります。技術的には再び間です(現在、正午の2つの完全な日付の間、または1日の前半と後半の間)。midnightnoon

これを合計すると、コードは24時間制で受信されないか、単に「」と書き出すだけでは受信できない可能性がありますtoday midnight

あなたのマイレージは異なる場合があります。

これは、時計の時刻に合わせたものです。ウィキペディアミッドナイトから:

「真夜中は、ある日から次の日への移行時間です。特定の管轄区域の現地の公式時計の時刻で、日付が変わる瞬間です。時計の時刻では、真夜中は正午とは逆で、12時間異なります。[私が大胆に]」

ウィキペディアの12時間制から:

「「12:00am」と「12:00pm」が何を意味するかは必ずしも明確ではありません。ラテン語のmeridies(正午)、ante(前)、post(後)から、ante meridiem(am)という用語は正午前と後メリディエム(pm)は正午以降を意味します。「正午」(正午、メリディー(m。))はそれ自体の前後ではないため、午前と午後という用語は適用されません。「12m。」は次のように提案されていますが正午を示す方法ですが、これはめったに行われず、真夜中を示す方法の問題も解決しません。」

于 2012-10-29T21:20:04.863 に答える
80

strtotime()の32ビット制限を超える日付の実行に問題がないため、新しいPHPDateTimeオブジェクトを使用する必要があると思います。これは、今日の日付を深夜に取得する方法の例です。

$today = new DateTime();
$today->setTime(0,0);

または、PHP 5.4以降を使用している場合は、次のように実行できます。

$today = (new DateTime())->setTime(0,0);

次に、を使用しecho $today->format('Y-m-d');て、オブジェクトを出力する形式を取得できます。

PHPDateTimeオブジェクト

于 2014-03-20T14:16:07.833 に答える
22

今日は真夜中。簡単。

$stamp = mktime(0, 0, 0);
于 2013-09-27T13:54:10.757 に答える
8

あなたは、太陽があなたの足の真下を通過した最新の天文現象の時間を計算し、正午をマークするという地元の慣習に合わせて調整し、仕事から家に帰った後に人々が十分な日光を残すように調整することを探しています。その他の政治的考慮事項。

気が遠くなるような権利?実際、これは一般的な問題ですが、完全な答えは場所によって異なります。

$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();

「ここ」の潜在的な定義は、https://secure.php.net/manual/en/timezones.phpにリストされています。

于 2015-12-29T15:19:06.270 に答える
6

2020年4月19日に回答を更新

簡単にこれを行うことができます:

$today = date('Y-m-d 00:00:00');

于 2020-04-19T13:56:02.873 に答える
5
$today_at_midnight = strtotime(date("Ymd"));

あなたが求めているものをあなたに与えるべきです。

説明

私が行ったのは、PHPのdate関数を使用して、時刻を参照せずに今日の日付を取得し、それを「stringtotime」関数に渡して日付と時刻をエポックタイムスタンプに変換することでした。時間がない場合は、その日の最初の1秒を想定しています。

参照:日付関数:http://php.net/manual/en/function.date.php

文字列から時間:http://us2.php.net/manual/en/function.strtotime.php

于 2012-10-29T21:18:54.797 に答える
2
$timestamp = strtotime('today midnight');

と同じです

$timestamp = strtotime('today');

サーバーでの作業が少し少なくなります。

于 2018-12-03T21:45:19.417 に答える
2

よりオブジェクト的な方法で:

$today = new \DateTimeImmutable('today');

例:

 echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00

と:

echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 14:00:35
于 2019-05-16T12:06:55.160 に答える
0

$midnight = strtotime('midnight');有効ですまたは
を試すこともできます 。デフォルトは今日なので、今日は深夜までに追加をスキップしました。strtotime('12am')strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')

于 2018-05-30T13:44:37.427 に答える
0

Carbonを使用している場合は、次のことができます。この日付をフォーマットしてExpireHTTPヘッダーを設定することもできます。

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)
于 2019-06-27T13:53:08.933 に答える