今日の真夜中のタイムスタンプを取得していますか?


123

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

ありがとうございました


真夜中は午前でも午後でもありません。また、技術的には、午前0時のタイムスタンプは存在しません。
12

16
@hakre私はあなたに同意しません。午前0時は午前であり、タイムスタンプの形式に関係なく、午前0時の値があります。
G-ナゲット2012年

1
00:00:00が今日または明日と見なされた場合。今日の真夜中は、技術的にほとんど常に、私たちの後ろにいます。「今夜」の23:59:59、または00:00:00「今日の真夜中、明日」が必要です。
12

5
00:00:00の時刻は今日の午前0時です。これは、すでに発生した00:00:00に到達するのに時間がかかるためです。23:59:59は今夜になります。今日の面で言えば。真夜中は午前です。
ナスカ2014年

4
00:00は一日の始まりの真夜中、24:00は一日の終わりの真夜中です。ただし、簡単にするために、ほとんどのデジタル時計は24:00をスキップします-真夜中が新しい日の始まりであることを宣言します。つまり、2月8日24:00と2月9日00:00は、実際には同じ時点です。
ヨハン

回答:


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

PHPが提供する機能を確認することをお勧めします。http//php.net/datetime


52
@SamHuckaby:$timestamp = strtotime('today');真夜中です。しかし、上記のpssstは、質問への回答としてよりクールに見えます;)
hakre

私は実際に今日と今日の真夜中に始める必要があります。今日の始まりを見つけるにはどうすればいいですか00:00:00
Happy Coder '22

3
@AlwinAugustin:表現を変えることを検討する必要があります。真夜中は厳密には2日間です。ですから、「今日はもうありません」とややあります。また、今日の真夜中(定義ごと)は、今日の始まり(直前)です。たぶん、今日の正午の次の真夜中を意味ます。
ハクレ

ええ実際に必要なのは今日の00:00:00と今日の23:59:59です
Happy Coder

2
これにより、UTC + 0ではなく、PHPサーバーのタイムゾーンの真夜中が生成されることに注意してください。UTC + 0を取得するには、を使用できますstrtotime('today+00:00')
mae

73

strtotime()が持っている32ビットの制限を超えて日付を処理するのに問題はないので、新しいPHP DateTimeオブジェクトを使用するべきだと思います。以下は、今日の日付を真夜中に取得する方法の例です。

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

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

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

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

PHP DateTimeオブジェクト


14
新しいDateTimeオブジェクトを使用することも好みます。この回答と@hakrの回答を組み合わせると、が得られますnew DateTime('today midnight')。これにより、意図がより明確になります(ただし、これはもちろん好みの問題です)。
Martijn 2014年

1
私はORM SQLの作業を行っており、比較にはDateTimeオブジェクトを使用する必要がありました。これはまさに私が探していたものです。+1
NobleUplift 2015年

可能性があります$today = new DateTime('today')
ProgZi 2016

DateTimeから継承するCarbonを使用している場合にも役立ちます。したがって、これを行うこともできnew Carbon('today midnight')、それからのようなすべてのCarbonを使用できます->subDays(6)carbon.nesbot.comを
Christopher K.

32ビット制限について:strtotime状態PHPドキュメント:「64ビットバージョンのPHPの場合、タイムスタンプの有効範囲は事実上無限です。64ビットはどちらの方向でも約2930億年を表すことができるためです。」したがって、32ビットphpにのみ適用されます。
クリストファーK.


7

あなたは、太陽があなたの足の真下を通過し、正午をマークするという現地の慣習に合わせて調整され、また仕事から家に帰った後に人々が十分な日光を残せるように調整される可能性がある、最新の天体イベントの時間を計算しようとしています。その他の政治的考察。

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

$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にリストされています。


好きstrtotime('America/New_York today midnight');?- 3v4l.org/I85qD
hakre

5
$today_at_midnight = strtotime(date("Ymd"));

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

説明

私がしたことは、PHPの日付関数を使用して、時間への参照なしで今日の日付を取得し、それを 'string to time'関数に渡して、日付と時刻をエポックタイムスタンプに変換しました。時間がない場合は、その日の最初の1秒と見なされます。

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

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


タイムスタンプ?それは単なる日付です。
wesside

OPが要求した特定の形式はありますか?もしそうなら、私は彼らが望むどんなフォーマットでも返すように私の投稿を喜んで修正します。
SamHuckaby 2012年

完全に見過ごされstrtotime()、心は日付関数に集中していました。謝罪。
12

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

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

と同じです

$timestamp = strtotime('today');

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


0

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


0

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

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)

0

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

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

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


-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());


質問はPHPに関連しています。この回答はJavaScriptで記述されています
Electric Coffee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.