我有这样一个Unix时间戳:

$timestamp=1330581600

我如何获取该时间戳的一天的开始和一天的结束?

e.g.
$beginOfDay = Start of Timestamp's Day
$endOfDay = End of Timestamp's Day

我试过这个:

$endOfDay = $timestamp + (60 * 60 * 23);

但我认为它不会起作用,因为时间戳本身并不是一天的确切开始.

推荐答案

strtotime可以用来快速地砍掉小时/分钟/秒

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;

DateTime也可以使用,不过从长时间戳中获取数据需要额外的几个步骤

$dtNow = new DateTime();
// Set a non-default timezone if needed
$dtNow->setTimezone(new DateTimeZone('Pacific/Chatham'));
$dtNow->setTimestamp($timestamp);

$beginOfDay = clone $dtNow;
$beginOfDay->modify('today');

$endOfDay = clone $beginOfDay;
$endOfDay->modify('tomorrow');
// adjust from the start of next day to the end of the day,
// per original question
// Decremented the second as a long timestamp rather than the
// DateTime object, due to oddities around modifying
// into skipped hours of day-lights-saving.
$endOfDateTimestamp = $endOfDay->getTimestamp();
$endOfDay->setTimestamp($endOfDateTimestamp - 1);

var_dump(
    array(
        'time ' => $dtNow->format('Y-m-d H:i:s e'),
        'start' => $beginOfDay->format('Y-m-d H:i:s e'),
        'end  ' => $endOfDay->format('Y-m-d H:i:s e'),
    )
);

在PHP7中增加了延长时间,如果使用$now <= $end判断,可能会错过一秒钟.

Php相关问答推荐

未找到laravel cascadeOnEdit

419注册期间Laravel 11中的错误

Symfony Monolog:使用多个格式化程序

SQLSTATE [42S02]:找不到基表或视图:1146 Table eshop. sessions不存在'''

如何在Woocommerce中禁用机器人添加到推车?

在WooCommerce管理订单页面中显示区域名称

将带有值的属性添加到WooCommerce产品,保留现有属性

WooCommerce在store 页面上显示兼容多语言的产品属性

创建一个新的可变产品及其属性以用于WooCommerce中的变体

中继器内置中继器的ACF WordPress组

PHP测试字符串的所有POST值

这是在可召回的背景下吗?

如何在微软图形API中使用用户S访问令牌或基于租户ID的访问令牌?

WooCommerce产品页面上没有产品详细信息

我需要一个正则表达式模式来获取在不包含特定字符串后面的模式中的文本

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

yii2 sql迁移覆盖新更改的记录

显示时间范围内的可用空位,同时考虑已预订的空位

PHP 将数组值插入到 csv 列

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)