如果给定一天的随机时间戳,有一种简单的方法可以获得一天的unix时间范围


There is a simple way to get unix time range of a day if given a random timestamp from that day?

如果给定一天的随机时间戳,有一种简单的方法可以获得一天的unix时间范围吗?我有一个1345547471的日期,是"2012年8月21日星期二11:11:11 GMT"

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

谢谢。

当然,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将正确处理夏令时和本地时间不连续的情况。

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

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

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

编辑:这还不算省下多少钱。

$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);

文件:

  • http://php.net/manual/en/function.date.php
  • http://php.net/manual/en/function.mktime.php

如果你使用的是PHP>=5.3.0,那么你可以使用这个。。。看看这个。

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

这与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);

工作样品的链接