время обработки php NULL как 00:00:00 - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть база данных со временем, сохраненным как TIME в формате 00:00:00. База данных принимает NULL, но я также использую функции, которые преобразуют время в 12-часовой формат только для просмотра.

Проблема в том, что когда время ввода пусто, функции, которые преобразуют формат, меняют NULL на 00:00:00, что мне было бы хорошо, но я не могу заставить его не печатать 12:00 AM при преобразовании это назад к 12-часовому времени.

Мне нужно либо:

  • Входные данные поступают в базу данных как NULL, а не 00:00:00

OR

  • Ничего не отображается при преобразовании 00:00:00 в 12-часовое время.

Это варианты функций, которые я использовал, опять же, это работает, если значение в реальном времени.

function time_12_to_24_sql ($value, $default) {
    $time = $_POST[$value];

    return ((!array_key_exists($value,$_POST)) || $_POST[$value] == NULL) ? $defaultValue : date("H:i:s", strtotime($time));
}

function time_12_to_24 ($input) {

if($input == NULL) {
    $retVal = $input;
}
if($input == 'NULL') {
    $retVal = $input;
}
if (!isset($input)) {
    $retVal = NULL;
}
if($input == '12:00 AM') {
    $retVal = NULL;
}
if($input == '') {
    $retVal = NULL;
}
else {
    $retVal = date("H:i:s", strtotime($input));
}
return $retVal;
}

function time_24_to_12 ($input) {
    if($input == NULL) {
        $retVal = $input;
    }
    if (strtotime($input) == '00:00:00') {
        $retVal = '';
    }
    if ($input == '') {
        $retVal = '';
    }
    if (!isset($input)) {
        $retVal = '';
    }
    else {
        if(strtotime($input) > 0){ 
            $retVal = date("g:i A", strtotime($input));
        }
    }
    return $retVal;
}

1 Ответ

0 голосов
/ 09 ноября 2018

Вы немного злоупотребляете strtotime() здесь. То, что вы хотите сделать, это использовать функции форматирования даты в PHP:

function time_24_to_12 ($input) {
    // empty checks for null, empty string, zero, false, unset, etc.
    if (empty($input)) {
        return "";
    }
    $date = DateTime::createFromFormat("H:i:s", $input);
    $time = $date->format("h:i:s A");
    return ($time === "12:00:00 AM") ? "" : $time;
}

function time_12_to_24 ($input) {
    if (empty($input)) {
        return "";
    }
    $date = DateTime::createFromFormat("h:i:s A", $input);
    $time = $date->format("H:i:s");

    return ($time === "00:00:00") ? "" : $time;
}

(Если вы хотите получить фантазию, вы можете выполнить проверку регулярных выражений на входе, а не просто проверять наличие пустых значений.)

Теперь это должно работать так, как вы ищете:

echo time_24_to_12("23:34:29") . "\n";
echo time_24_to_12("00:00:00") . "\n";
echo time_24_to_12("") . "\n";

echo time_12_to_24("11:34:29 PM") . "\n";
echo time_12_to_24("12:00:00 AM") . "\n";
echo time_12_to_24(null) . "\n";

Результат:

11:34:29 PM


23:34:29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...