圆形时间戳到特定小时

时间:2017-12-11 08:00:16

标签: php datetime timestamp unix-timestamp

我有一个时间戳1512070200,意思是格林威治标准时间2017年11月30日晚上7:30:00或2017年12月1日格林尼治标准时间上午01:00:00 + 05:00。

我希望能够减去当天所经过的时间,并恢复到凌晨12:00:00的时间。

例如

如果我的时间戳为1512978955,即格林威治标准时间2017年12月11日上午7:55:55我希望输出为1512950400,即2017年12月11日上午12:00:00 GMT。

没有固定的小时数可以从时间戳中减去,而是根据特定日期的时间而变化,因此它可能是1毫秒或1秒或1分钟或1小时从凌晨12:00:00开始。

2 个答案:

答案 0 :(得分:2)

一种方法是将时间戳转换为日期,然后分解为其组成部分,以便您可以使用mktime在中午生成日期

$ts=1512070200;

$y=date('Y',$ts);
$m=date('m',$ts);
$d=date('d',$ts);

$date=date('Y-m-d H:i:s',mktime(12,0,0,$m,$d,$y));
echo date('Y-m-d H:i:s',$ts).' -> '.$date;

输出

2017-11-30 19:30:00 -> 2017-11-30 12:00:00

或者,如果输出日期需要如图所示,请使用

$format=DATE_COOKIE;
$ts=1512070200;

$y=date('Y',$ts);
$m=date('m',$ts);
$d=date('d',$ts);

$date=date($format,mktime(12,0,0,$m,$d,$y));
echo date($format,$ts).' -> '.$date;

#Thursday, 30-Nov-17 19:30:00 GMT -> Thursday, 30-Nov-17 12:00:00 GMT

使用noon更容易,如@ splash58

所示
echo date( $format, strtotime( 'noon', $ts ) );

答案 1 :(得分:1)

您可以将noon时间设置为DateTime对象

$ts=1512070200;

$date = new DateTime();
$date->setTimestamp($ts);
$date->modify('noon');
echo $date->format(DATE_COOKIE); // Thu, 30 Nov 2017 12:00:00 +0000

demo