在午夜获取今天的时间戳?

2022-08-30 06:50:01

我该如何在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();
  1. 这是在默认时区
  2. 剧透:只是“”或只是“”返回相同。midnighttoday
  3. 添加一个时区,例如“”,以始终拥有它。UTC today
  4. 剧透#2:UTC问候风格:”midnightZ"
  5. 历史:午夜是自 PHP 5.1.2 (2006 年 1 月) 起,今天PHP 4.3.1 (2003 年 2 月) 起

更多示例:

给定时间 UTC 2020-01-01 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()DateTime 和 .date_create()

  • 您可能想看看PHP可以提供的更多功能:https://php.net/datetime - PHP中日期时间相关函数和对象的入口页面,其中包含指向其他与日期时间相关的扩展的链接。


注意:虽然“”在技术上介于两天之间,但这里是“”(一天的开始)与PHPs' 。midnighttodaystrtotime

讨论:

到目前为止,答案或是PHP的完整且听起来不错的答案,它可能看起来有点冗长,并返回相同的结果。strtotime("today midnight")strtotime("midnight today")strtotime("midnight")strtotime("today")

但是,即使更加冗长,也并不总是立即回答这个问题,如果它是关于一天开始的午夜还是一天结束的午夜,即使在今天也被给出作为上下文。在阅读“今天午夜”时,我们可能会想到一天的开始,但这是一个假设,并不精确,也许不可能。维基百科

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

与此编程问题进行比较:

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

(它将在两个UNIX时间戳之间,因此您将采用两个时间戳并描述两者的含义,这不会回答问题,因为它要求单个时间戳)。

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

让我们采用众所周知的数字24小时制,小时和分钟,并表示午夜(它更精确吗?

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

或一天结束时:

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

(注:显示为次日开始)

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

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

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

午夜这样在时钟上映射的过渡时间可能导致的混乱甚至可能变得更加明显,因为12小时时钟类似于“”中午(在PHP中不作为相对日期/时间格式提供,但“”)在技术上介于两个完整日期之间(现在在中午的两个完整日期之间,或者在一天的前半段和后半天之间)。midnightnoon

当这种情况加起来时,代码在24小时内可能不太受欢迎,或者只是写出“”。today midnight

您的里程可能会有所不同。

这与时钟时间有点一致。来自维基百科午夜

“午夜是从一天到下一天的过渡时间 - 日期变化的时刻,在任何特定司法管辖区的当地官方时钟时间上。按时钟时间计算,午夜与中午相反,与中午相差12小时。[我大胆]”

来自维基百科的12小时时钟

“并不总是清楚”12:00 a.m.“和”12:00 p.m.“表示什么。从拉丁语meridies(中午),ante(之前)和post(之后)中,术语ante meridiem(a.m.)意味着在中午之前,post meridiem(p.m.)意味着在中午之后。由于“中午”(中午,经络(m.))既不在它之前也不是之后,因此术语a.m.和p.m.不适用。虽然建议将“12 m.”作为表示中午的一种方式,但很少这样做,也没有解决如何表示午夜的问题。


答案 2

我认为你应该使用新的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 日期时间对象


推荐