如何使用strotime更新mysql unix时间戳

时间:2019-03-08 16:36:23

标签: php mysql unix

date_default_timezone_set('America/Los_Angeles'); 
$insert = "INSERT INTO sql(name, time, time_end) VALUES ('".$name."', '". strtotime('now')."', '". strtotime('+2 days')."') ;";
    mysqli_query($conn, $insert);

插入查询以处理表单中的数据,并在PST中显示时间

dispay.php

name             started at                    ending at 

test            March 7, 2019, 3:41 pm        March 10, 2019, 3:41 pm

stack           March 8, 2019, 6:53 am        March 9, 2019, 6:53 pm 

因此,我在表单中具有单选按钮以选择要添加并提交的小时数。 增加了72小时的测试时间和24小时的堆叠时间

如果必须更新time_end,我不知道如何在更新查询中准确使用strtotime,因此我尝试使用此查询直接向其添加秒数

$update = "UPDATE table SET
    time_end = time_end + 252900
    where name = 'test' ;";
    mysqli_query($conn, $update);

然后它将显示

dispay.php

name             started at                    ending at 

test            March 7, 2019, 3:41 pm        March 13, 2019, 4:41 pm

stack           March 8, 2019, 6:53 am        March 9, 2019, 6:53 pm 

问题是,当我以这种方式使用更新查询时,而不是在我使用插入查询时,这增加了一个额外的小时。请告诉我如何解决这个问题

2 个答案:

答案 0 :(得分:1)

时间几乎可以连续几秒钟计算。即1,2,3,4秒过去了,依此类推。
这正是unix时间戳。自特定时间点(UNIX时代)以来经过的秒数。由于这是经过的秒数,因此可以表示为整数。
但是,我们的日历和时钟并没有连续直线地计算时间。时间和日期是非常复杂和相对的概念。某一时刻可能是1.59am,而下一秒实际上是3.00am。之后又过了六个月,您两次重现了同一小时。
我的example in PHP over here说明了这一点。

在您的示例中,您跳过了一个小时,但您的秒数并未说明这种差异。一种简单的方法如下:

$start = 1552211999;
$dt = new DateTime('@'.$start);
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));
$dt->modify('+1 day');

Try it online at Ideone

答案 1 :(得分:0)

您应该使用mysqli_准备好的语句来避免sql注入漏洞。

但这是应​​该工作的UPDATE查询;

https://www.db-fiddle.com/f/4AH8mJyogLMeruseABPhiD/0

$insert = "INSERT INTO sql(name, time, time_end) 
           VALUES ( ? , NOW() , NOW() + INTERVAL 2 DAY)";

$update = "UPDATE sql SET
                  time_end = time_end + INTERVAL 2 DAY
           WHERRE name = ? ";

您可以通过以下方式对prepared statement使用此查询:

$stmt = mysqli_prepare($conn, $insert); 
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $name);
/* execute query */
mysqli_stmt_execute($stmt);