我将如何在今天午夜在 php 中获取时间戳。假设现在是星期一下午 5 点,我想要星期一(今天)午夜(上午 12 点)的时间戳,这已经发生了。
谢谢
$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();
midnight
”或或只是“ today
”返回相同。UTC today
”,始终拥有它。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
PHP 文档:
在相对格式页面上,查看基于日的表示法表。这些格式适用strtotime()
于DateTime
和date_create()
。
您可能想看看 PHP 提供的更多功能:https ://php.net/datetime - PHP 中与日期时间相关的函数和对象的入口页面,其中包含指向其他与日期时间相关的扩展的链接。
注意:虽然“ midnight
”在技术上介于两天之间,但这里是“ today
”(一天的开始)与 PHPs' strtotime
。
讨论:
到目前为止,答案strtotime("today midnight")
orstrtotime("midnight today")
是一个完整且听起来不错的 PHP 答案,它可能看起来有点冗长,strtotime("midnight")
并strtotime("today")
返回相同的结果。
但是,即使是更加冗长,也并不总是能立即回答这个问题,如果它是关于一天开始的 午夜或一天结束的午夜,即使在今天也是作为上下文给出的。阅读“今天午夜”时,我们可能会想到一天的开始,但这是一个假设,并不精确,也许不可能。维基百科:
尽管在这个问题上没有全球一致意见,但午夜通常被认为是新一天的开始,并与 00:00 小时相关联。
与此编程问题进行比较:
(它将在两个 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 中不可用作为相对日期/时间格式,但“ ”)从技术上讲,介于两者之间(现在在中午的两个完整日期之间,或在一天的前半天和后半天之间)。midnight
noon
这样一来,代码可能不会在 24 小时内得到很好的接受,或者只是写出“ today midnight
”。
你的旅费可能会改变。
这有点与时钟时间一致。来自维基百科午夜:
“午夜是从一天到下一天的过渡时间——日期变化的时刻,在任何特定司法管辖区的当地官方时钟时间。按时钟时间,午夜与中午相反,相差 12 小时。[由我粗体]"
并来自维基百科 12 小时制:
“并不总是很清楚“12:00 am”和“12:00 pm”表示什么时间。从拉丁词meridies(中午),ante(之前)和post(之后),术语ante meridiem(上午)表示before meridiem (pm) 表示中午之后。由于“noon”(midday, meridiem (m.))既不在其之前也不在其之后,因此术语 am 和 pm 不适用。尽管“12 m.”被建议为一种表示中午的方法,这种做法很少做,也不能解决如何表示午夜的问题。”
我认为您应该使用新的 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');
获取您希望对象输出的格式。
今天午夜。简单的。
$stamp = mktime(0, 0, 0);
您正在计算最近一次天体事件的时间,即太阳直接从您的脚下经过,并根据当地的正午标记惯例进行调整,并可能进行调整,以便人们下班回家后有足够的日光,以及其他政治考虑。
令人生畏吧?实际上这是一个常见问题,但完整的答案取决于位置:
$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
2020 年 4 月 19 日更新的答案
我们可以这样做:
$today = date('Y-m-d 00:00:00');
$today_at_midnight = strtotime(date("Ymd"));
应该给你你所追求的。
解释
我所做的是使用 PHP 的 date 函数来获取今天的日期而不引用任何时间,然后将其传递给“string to time”函数,该函数将日期和时间转换为纪元时间戳。如果没有时间,则假定为当天的第一秒。
参考:日期函数: http: //php.net/manual/en/function.date.php
以更客观的方式:
$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
$timestamp = strtotime('today midnight');
是相同的
$timestamp = strtotime('today');
而且你的服务器上的工作少了一点。
$midnight = strtotime('midnight');
是有效的
你也可以试试
strtotime('12am')
或strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
。我跳过了在午夜之前添加今天,因为默认是今天。
如果您使用的是 Carbon,您可以执行以下操作。您还可以格式化此日期以设置Expire
HTTP 标头。
Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)