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
问题是,当我以这种方式使用更新查询时,而不是在我使用插入查询时,这增加了一个额外的小时。请告诉我如何解决这个问题
答案 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');
答案 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);