$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();
- 那是在default timezone。
- 剧透:仅“
midnight”或“today”返回相同。
- 添加时区,例如“
UTC today”,永远拥有它。
- 剧透 #2:UTC 问候风格:“
midnightZ”
- 历史:
midnight 自 PHP 5.1.2(2006 年 1 月),today 自 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 文档:
注意:虽然“midnight”在技术上在两天之间,但这里是“today”(一天的开始)和 PHP 的 strtotime .
讨论:
到目前为止,strtotime("today midnight") 或 strtotime("midnight today") 的答案对于 PHP 来说是一个完整且听起来不错的答案,它可能看起来有点冗长,因为 strtotime("midnight") 和 strtotime("today") 返回相同的结果。
但即使是更冗长也不总是立即回答这个问题,如果它是关于一天开始的午夜或一天结束的午夜,即使在今天也被给出为语境。阅读“今天午夜”时,我们可能会想到一天的开始,但这是一个假设,并不精确,也许不可能。 Wikipedia:
尽管在这个问题上没有全球一致意见,但午夜通常被认为是新一天的开始,并与 00:00 小时相关联。
与这个编程问题比较:
- 鉴于午夜是一个时间转换
- 请求单个 UNIX 时间戳时
- 那就没有答案了
(它将在两个 UNIX 时间戳之间,因此您将获取两个时间戳并描述两者的含义,这不会回答问题,因为它要求单个时间戳)。
由于这种不匹配以及 UNIX 时间引用日期/时间的方式,这不容易完全解决。
让我们用众所周知的数字 24 小时时钟来表示小时和分钟并表示午夜(更精确吗?):
$midnight = strtotime("today 00:00");
或结束一天:
$midnight = strtotime("today 24:00");
(注意:显示为第二天的开始)
或者12小时制,也可以用来给出今天午夜的UNIX时间戳:
$midnight = strtotime("12:00 a.m.");
(注意:strtotime() 不支持 “午夜 12 点” 表示法)
过渡时间(如 Midnight)映射到时钟上可能会导致混淆,使用类似于“@987654358”的 12 小时制时钟甚至会变得更加明显@" midday(在 PHP 中不能作为相对日期/时间格式,但“noon”)在技术上介于 again 之间(现在在中午的两个完整日期之间,或在前半天和后半天之间)。
这样一来,代码在 24 小时内可能不会被很好地接受,或者只是写出“today midnight”。
您的里程可能会有所不同。
这有点与时钟时间一致。来自Wikipedia Midnight:
“午夜是一天到下一天的过渡时间 – 日期变化的时刻,在当地任何特定司法管辖区的官方时钟时间。按时钟时间,午夜与中午相反,相差 12 小时。[粗体]"
来自Wikipedia 12-hour clock:
““12:00 am”和“12:00 pm”表示什么时间并不总是很清楚。从拉丁词meridies(中午)、ante(之前)和post(之后),术语ante meridiem (am) 表示中午之前,post meridiem (pm) 表示中午之后。由于“noon”(中午,meridies (m.))既不在其之前也不在其之后,因此术语 am 和 pm 不适用。虽然“12 m." 被建议作为表示中午的一种方式,但很少这样做,也不能解决如何表示午夜的问题。”