找到今天午夜的时间戳了吗?

如何在今天午夜获取 php 中的时间戳呢。假设现在是星期一下午5点,我希望 Timestamp 星期一(今天)午夜(上午12点)已经发生了。

谢谢你

175382 次浏览
$today_at_midnight = strtotime(date("Ymd"));

应该能给你想要的东西。

解释

我所做的是使用 PHP 的 date 函数获取今天的日期,而不引用任何时间,然后将其传递给“ string to time”函数,该函数将日期和时间转换为纪元时间戳。如果没有时间,它会假设那天的第一秒。

参考文献: 日期功能: < a href = “ http://php.net/Manual/en/Function. Date.php”rel = “ nofollow”> http://php.net/manual/en/Function.Date.php

字符串到时间: http://us2.php.net/manual/en/function.strtotime.php

$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();
  1. 那是在 默认时区里。
  2. 剧透: 只是“ midnight”或只是“ today”返回相同。
  3. 添加一个时区,例如“ UTC today”,以拥有它,总是。
  4. 剧透 # 2: UTC 的问候方式: “ midnightZ
  5. 历史: midnight始于 PHP 5.1.2(2006年1月) ,today始于 PHP 4.3.1(2003年2月)

更多例子:

考虑到时间 世界协调时2020-01-0100:00: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()DateTimedate_create()

  • 您可能想看看 PHP 还提供了哪些功能: https://php.net/datetime—— PHP 中与日期时间相关的函数和对象的入口页面,以及到其他与日期时间相关的扩展的链接。


注意: 虽然“ midnight”在技术上是 中间两天,这里是“ today”(一天的开始)与 PHP 的 strtotime

讨论:

到目前为止,对于 PHP 来说,strtotime("today midnight")strtotime("midnight today")是一个完整的、听起来不错的答案,当 strtotime("midnight")strtotime("today")返回相同的结果时,它可能显得有点冗长。

但即使是更详细的答案并不总是立即回答这个问题,如果它是关于午夜为 今天开始或午夜为 今天结束即使是今天作为上下文。当我们阅读 “今天午夜”的时候,我们可能会想到一天的开始,但这是一个假设,并不精确,也许不可能。返回文章页面

虽然在这个问题上没有全球一致的意见,但是通常午夜被认为是新的一天的开始,并且与00:00这个小时有关。

与这个编程问题相比较:

  • 给定午夜是 时间转换
  • 当请求单个 UNIX 时间戳时
  • 那就没有答案了

(它将位于两个 UNIX 时间戳之间,因此您将获取两个时间戳并描述这两个时间戳的含义,而这并不能回答这个问题,因为它只要求一个时间戳)。

由于这种不匹配以及 UNIX Time 引用日期/时间的方式,要完全解决这个问题并不容易。

让我们用著名的24小时数字时钟表示小时和分钟,并表示 午夜(它更精确吗?) :

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

或者在一天结束的时候:

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

(注: 显示为第二天开始)

或者12小时的时钟,它也可以用来给 今天午夜UNIX 时间戳:

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

(注意: strtotime()不支持 “午夜12点”表示法)

午夜这样的 过渡期在时钟上映射的混乱甚至可能在12小时的时钟上变得更加明显,就像“ midnight”一样。 中午(在 PHP 中没有相对日期/时间格式,但是“ noon”)在技术上处于 再来一次之间(现在在中午的两个完整日期之间,或者在一天的前半天和后半天之间)。

随着这个数字的增加,代码可能不会在24小时内得到很好的接收,或者只是写出“ today midnight”。

你的情况可能会有所不同。

这和 时间到了是一致的,来自 维基百科午夜:

“午夜是 过渡期从一天到另一天的时间—— 片刻时是 日期变了时,对于任何特定司法管辖区来说都是当地的官方时钟时间。按时钟计算,午夜与正午相反,相差12个小时。”

维基百科12小时的时钟:

“‘上午12:00’和‘下午12:00’指的是什么时间并不总是很清楚。从拉丁语中的 meridies (中午)、 ante (之前)和 post (之后)来看,ante meridiem (上午)指的是中午之前,post meridiem (下午)指的是中午之后。由于“中午”(正午,子午)既不在它之前也不在它之后,所以上午和下午这两个术语不适用。虽然“12米”被建议作为表示中午的一种方式,但这很少做,也不能解决如何表示午夜的问题

今天午夜,很简单。

$stamp = mktime(0, 0, 0);

我认为您应该使用新的 PHP DateTime 对象,因为它在处理超出 strtotime ()32位限制的日期方面没有任何问题。这里有一个例子,你可以得到今天午夜的日期。

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

或者如果你使用 PHP 5.4或更高版本,你可以这样做:

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

然后您可以使用 echo $today->format('Y-m-d');获得您想要的对象输出格式。

PHP 日期时间对象

你正在计算最近一次太阳从你脚下直接经过的天体事件发生的时间,根据当地标记正午的惯例进行调整,也可能进行调整,以便人们下班回家后有足够的日照时间,以及其他政治考虑。

难以置信吧? 实际上这是一个常见的问题,但完整的答案取决于地理位置:

$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中列出

$midnight = strtotime('midnight');是有效的 < br/> 你也可以试试 我跳过了在午夜之前添加,因为默认是今天。

$timestamp = strtotime('today midnight');

$timestamp = strtotime('today');

服务器上的工作量也少了一点。

以更客观的方式:

$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

如果您正在使用 Carbon,您可以执行以下操作。您还可以设置此日期的格式以设置 Expire HTTP 头。

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

2020年4月19日更新的答案

简单地说,我们可以这样做:

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