我有一个时间戳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开始。
答案 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