1

如果给定当天的随机时间戳,有一种简单的方法可以获取一天的 unix 时间范围?我有一个像 1345547471 这样的日期,即“星期二,2012 年 8 月 21 日 11:11:11 GMT”

有一个 php 函数可以接收这样的时间戳并返回当天的 00:00 小时时间戳和 23:59 小时时间戳?

谢谢你。

4

5 回答 5

7

当然,DateTime可以做到这一点:

$time = 1345547471;
$date = new DateTime;
// $date->setTimezone( new DateTimeZone( "America/New_York")); // Can set TZ here if needed
$date->setTimestamp( $time);

现在,您可以将时间设置为您想要的任何时间:

$date->setTime( 0, 0, 0); // 0h 0m 0s

并获取生成的 UNIX 时间戳:

$timestamp = $date->getTimestamp();

下一个用例也是如此:

$date->setTime( 23, 59, 0);
$timestamp = $date->getTimestamp();

重要的是要注意 DateTime 将正确处理夏令时和本地时间不连续的情况。

于 2012-08-21T13:30:14.600 回答
6

您可以使用这样的modPHP 函数(在除法后给出余数)来获取 Unix 时间戳的第一秒(即今天 0:00:00)

$var=time()-(time()%86400);

然后使用这个 unix 时间戳,您可以添加 86399 以获得当天的最后一秒。

编辑:这不考虑日光节约。

于 2012-08-21T13:30:39.480 回答
0
$ts = 1345547471;

$ts_00_00 = mktime(0,0,0, date("m", $ts), date("d",$ts), date("Y",$ts);
$ts_23_59 = mktime(23,59,59, date("m", $ts), date("d",$ts), date("Y",$ts);

文档:

于 2012-08-21T13:30:15.067 回答
0

如果您使用的是 PHP >= 5.3.0 那么您可以使用这个...检查一下。

http://www.php.net/manual/en/datetime.createfromformat.php

于 2012-08-21T13:31:09.497 回答
0

这类似于 Fluffeh 的回答,但考虑了夏令时。这基于服务器的时区。

//Get time range for today
$start = strtotime(date("Y-m-d")." 00:00:00");
$end = strtotime(date("Y-m-d")." 23:59:59");

//Show our date in a human-readable format for troubleshooting
echo date(DATE_RFC1036,$start)."<br>".date(DATE_RFC1036,$end);

如果你想指定一个自定义时区而不是服务器时区,你可以像这样添加它:

//Get time range for today
$start = strtotime(date("Y-m-d")." 00:00:00 -0500");
$end = strtotime(date("Y-m-d")." 23:59:59 -0500");

//Show our date in a human-readable format for troubleshooting
echo date(DATE_RFC1036,$start)."<br>".date(DATE_RFC1036,$end);

链接到工作样本

于 2017-02-27T16:06:30.000 回答