我这里有个问题。。
假设我有这样的约会时间。
$date = strtotime($date);
我需要将其转换为Unix时间戳格式,但要提前一小时。。我试过
$date = strtotime($date-86400)
,但在我看来这是错误的。当我偷偷溜进桌子时,结果是0。
实现这一目标的适当方式是什么?
谢谢。
strtotime将为您提供日期的unix时间戳。从这个时间戳中,您可以减去您的小时数:
$date = strtotime($date) - 3600; // 3600 = 60 * 60
如果调用strtotime($date - 3600)
,就像获取-3600(例如strtotime(-3600)
)的时间一样,这毫无意义,因为strtotime需要一个字符串作为第一个参数。
你可以做:
$testDateStr = strtotime($date);
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr));
希望它能帮助
86400秒是一天,而不是一小时。
strtotime()的输出是一个unix时间戳。3600秒之前的时间戳减去一小时。因此:
$date = strtotime($somestring);
$hourago = $date - 3600;
或者,根据$somestring的原始格式:
$hourago = strtotime($somestring . " - 1 hour");
不要忘记date_default_timezone_set()
还没有人提供DateTime
对象解决方案,所以我会的。它是处理日期时间的最现代的方法,不需要计算任何分钟&秒。
我总是喜欢加入一些时区声明,让事情变得明确。夏令时通常是日期时间操作的一个问题,但在这种情况下可能还可以。请随意修改您的案件的时区。
PHP手册链接:
- DateTime对象
- 日期时间修改()
- 日期时间getTimestamp()
- DateTime格式()
- 时区列表
代码(包括用于比较的格式化时间)演示链接:
$now=new DateTime('NOW UTC');
$now_stamp=$now->getTimestamp();
$formatted_now=$now->format("Y-m-d H:i:s");
echo "$now_stamp ($formatted_now)'n";
$hour_ago=$now->modify('-1 hour');
$hour_ago_stamp=$hour_ago->getTimestamp();
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s");
echo "$hour_ago_stamp ($formatted_hour_ago)";
输出:
1492687193 (2017-04-20 11:19:53)
1492683593 (2017-04-20 10:19:53)
尝试此查询
$query= "insert into yourTable(otherValues, date)
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour))
使用DATE_ADD插入比当前时间短1小时的日期值。
在我看来,这是更好的方式:
// It's better to set your time location, for example, in Iran.
date_default_timezone_set("Asia/Tehran");
$datetime = new DateTime(date());
// Subtract one hour
$interval = new DateInterval("PT1H");
$datetime->sub($interval);
// Format and echo the updated datetime
echo $datetime->format("H:i:s");