我在这里遇到问题..
假设我有这种日期时间。
$date = strtotime($date);
我需要将它转换为Unix时间戳格式,但提前一小时......我试过
$date = strtotime($date-86400)
,但在我看来这是错误的。当我潜入桌子时,它返回0。
实现这一目标的适当方法是什么?
感谢。
答案 0 :(得分:6)
strtotime将为您提供日期的unix时间戳。从这个时间戳开始,你减去你的小时:
$date = strtotime($date) - 3600; // 3600 = 60 * 60
如果你打电话给strtotime($date - 3600)
,就像获得-3600的时间(例如strtotime(-3600)
)一样没有意义,因为strtotime期望一个字符串作为第一个参数。
答案 1 :(得分:5)
你可以这样做:
$testDateStr = strtotime($date);
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr));
希望有所帮助
答案 2 :(得分:3)
86400秒是一天,而不是一小时。
strtotime()的输出是一个unix时间戳。 3600秒之前是时间戳减一个小时。所以:
$date = strtotime($somestring);
$hourago = $date - 3600;
或者,取决于$ somestring的原始格式:
$hourago = strtotime($somestring . " - 1 hour");
答案 3 :(得分:1)
尝试此查询
$query= "insert into yourTable(otherValues, date)
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour))
使用DATE_ADD插入比当前时间少1小时的日期值。
答案 4 :(得分:1)
还没有人提供DateTime
对象解决方案,所以我愿意。
它是处理日期时间最现代化的方法,并不需要任何分钟计算。秒。
我总是喜欢在某种时区声明中做出明确的决定。夏令时通常是日期时间操作的关注点,但在这种情况下可能没问题。随意修改案例的时区。
PHP手册链接:
代码(包括用于比较的格式化时间)Demo Link:
$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)