Unix时间戳取整到午夜

27
如果我有一个随机的Unix时间戳,怎么将它舍入到今天午夜或用户选择的午夜。这是因为我想在某个特定日期的午夜之后添加小时和分钟。
例如,如果时间戳是1324189035,那么如何移除小时、分钟和秒数,使时间戳变成当天的午夜。
6个回答

24
echo date('d-m-Y H:i:s', strtotime('today', 1324189035));

2
这很漂亮。我曾经看到有人想出了一个超越常规的方法,像 $roundedStamp = $time - ($time % 86400); 这样,它很聪明但不完美。它会根据情况四舍五入,所以不起作用。这个方法就可以解决这个问题 :) - Yes Barry
这将返回一个日期字符串,您需要添加 strtotime 以获取午夜的时间戳,该时间戳应包裹整个被回显的代码。 - Solomon Closson
@SolomonClosson strtotime('today', 1324189035) 已经存在并且可以实现这个功能,date 只是为了演示它实际上是午夜。 - zerkms
哎呀,明白了,刚才 date 命令的输出有点让我困惑。 - Solomon Closson
在绝望的希望中,这可能会对处于我的情况下的某人有所帮助,稍微调整一下可以从UNIX纪元得到天数(从相同时间戳消除舍入误差):round(strtotime('today', time()) / 86400))。 我的用例是找到自纪元以来的奇数天以交替执行cron程序round($daysFromUnixEpoch) % 2 === 0 - Scott Anderson

18
因为你的使用方式,我不会计算午夜时间:更容易的方法是将你要添加到时间戳的内容转换为24小时制,然后使用strtotime函数:
echo strtotime("0:00",1324189035); // 1324184400
echo strtotime("17:50",1324189035); // 1324248600

如果您想要人类可读的时间格式,可以使用 datem/d/Y H:i:s

echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00

这个解决方案非常优雅和令人愉悦。需要记住的是,这都是格林威治标准时间,因此要在任何其他时区获得17:50,需要在此时间映射之前添加时间偏移量,然后再次减去(假设您最终正在寻找用于搜索数据库的GMT / UTC时间)。 - Jason
它似乎将午夜映射到前一天的午夜:echo strtotime("0:00 +0000", 1443441600); 打印出 1443398400 - Rag

8

简单易用

strtotime('today midnight');

1
这非常易读,也非常灵活。例如:strtotime('now + 1 year + 1 day midnight') - Fabien Snauwaert
只是想补充一下,strtotime('today midnight')和strtotime('midnight')都会输出相同的时间戳。 - Marvel Moe

1

只要做

date('d-m-Y',strtotime('today'));

容易!


1
一个简单的解决方案是使用模运算表达式从一个完整的日期时间戳中减去超出的秒数。
<?php

date_default_timezone_set('UTC');

$timestamp = time();

echo "timestamp : " . $timestamp . PHP_EOL;
echo "timestamp formatted : " . date('Y-m-d H:i:s', $timestamp) . PHP_EOL;

$diff = $timestamp % (60 * 60 * 24);

echo "diff : " . $diff . PHP_EOL;

$midnight = $timestamp - $diff;

echo "midnight : " . $midnight . PHP_EOL;
echo "midnight formatted : " . date('Y-m-d H:i:s', $midnight) . PHP_EOL;

这将输出以下结果。

时间戳:1575451074

格式化时间戳:2019-12-04 09:17:54

午夜差异:1575417600

午夜格式化:2019-12-04 00:00:00

这是一个一行函数,可以从任何时间戳获取午夜。
function getMidnight ($timestamp) { return $timestamp - ($timestamp % 86400); }

http://sandbox.onlinephpfunctions.com/code/1d85c935e71fcf011284ae33658e0c68dd8d8c28


0

只需要这样:

date -d $(date +%F) +%s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接