как использовать strotime для обновления метки времени mysql unix - PullRequest
1 голос
/ 08 марта 2019
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 ]

1 голос
/ 08 марта 2019

Время можно считать почти идеально в последовательных секундах.то есть прошло 1,2,3,4 секунды и т. д.
Именно это и есть метка времени Unix;это количество секунд, прошедших с определенного момента времени, который является эпохой UNIX.Поскольку это количество прошедших секунд, оно может быть выражено как целое число.
Однако наши календари и часы не отсчитывают время по прямой.Время и даты очень сложные и относительные понятия.В один момент это может быть 1.59 и буквально в следующую секунду это будет 3.00.Еще через шесть месяцев вы снова переживаете один и тот же час дважды.
Это иллюстрируется моим примером на PHP здесь .

В вашем примере вы пропускаете час на часах, но ваш счетчик секунд не учитывает эту разницу.Один простой способ сделать это может быть следующим:

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

Попробуйте онлайн на Ideone

0 голосов
/ 08 марта 2019

Вы должны использовать 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 = ? ";

Этот запрос можно использовать для подготовленного оператора следующим образом:

$stmt = mysqli_prepare($conn, $insert); 
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $name);
/* execute query */
mysqli_stmt_execute($stmt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...