В PHP, если переменная содержит дату и время, что делает оператор--? - PullRequest
0 голосов
/ 30 июля 2010

Мой опыт работы с C, Java, C # и VB.NET, но я должен работать над некоторыми базовыми PHP-вещами.Я дошел до этой строки кода:

if($flag) $event_end--;

Что именно уменьшается?Сырые клещи?$ flag (я думаю) представляет, если событие является мероприятием в течение всего дня, где начало будет 1 июля 2010 года, а конец - 2 июля 2010 года.Делает ли - по существу, $ event_end [01.07.2010 11: 59: 59.99999 PM]?

- редактировать: хорошо, основное правило технических вопросов: объясните, о чем вы говорите.виновным.$ event_end изначально устанавливается с помощью функции mktime ().это помогает?

Ответы [ 4 ]

1 голос
/ 30 июля 2010

Была ли функция, такая как strtotime(), вызываться в дату-время первой? Эта функция возвращает метку времени Unix, соответствующую дате и времени. Если время равно 0 (то есть полночь), вычитая из него 1 (то есть отбирая 1 секунду), результатом будет время 23: 59: 59.

$event_end = '2010-07-30 00:00:00';
$event_end = strtotime($event_end);
$event_end--;
$event_end = date("Y-m-d H:i:s",$event_end);
echo $event_end;  //This will result in '2010-07-29 23:59:59'

PHP рассматривает значения даты и времени (как, например, из MySQL) как простые строки, если только они не являются объектами DateTime, и в этом случае я не думаю, что вычитание из этого могло бы что-то сделать. Единственный способ, которым оператор мог бы повлиять на значение, это если бы это было целое число временной метки.

EDIT: Ах, я вижу, он использует mktime(). Это также возвращает метку времени Unix и, следовательно, может использоваться математически. Итак, чтобы ответить на ваш вопрос, на самом деле $event_end--; вычитает одну секунду.

Обновленный код:

$event_end = mktime(0, 0, 0, 7, 30, 2010);
$event_end--;
$event_end = date("Y-m-d H:i:s",$event_end);
echo $event_end;  //This will result in '2010-07-29 23:59:59'
0 голосов
/ 30 июля 2010

Если $ event_end установлен mktime (), то это длинное целое число, содержащее количество секунд между эпохой Unix (1 января 1970 г. 00:00:00 GMT) и указанным временем.

$event_end-- уменьшит число на одну (одну секунду).

0 голосов
/ 30 июля 2010

Вы имеете в виду объект DateTime?Насколько я могу судить, ничего не происходит вообще.

 >> $a = new DateTime()
 DateTime::__set_state(array(
    'date' => '2010-07-30 12:32:22',
    'timezone_type' => 3,
    'timezone' => 'UTC',
 ))
 >> $a--;
 DateTime::__set_state(array(
    'date' => '2010-07-30 12:32:22',
    'timezone_type' => 3,
    'timezone' => 'UTC',
 ))

Если вы имеете в виду дату / время, хранящиеся в виде строки, обратитесь к тому, как строки приводятся в разделе чисел в руководстве.

0 голосов
/ 30 июля 2010

Это полностью зависит от того, как был установлен $ event_end: PHP не имеет нативного понятия «дата / время».Это могут быть секунды, миллисекунды или даже дни, в зависимости от того, откуда они пришли.

...