проверка php на правильную дату, странные преобразования даты

В Ruby вы можете использовать опцию 'm' (многострочный):

/YOUR_REGEXP/m

См. Regexp документацию на ruby-doc.org для получения дополнительной информации.

13
задан Michiel de Mare 30 April 2009 в 05:35
поделиться

4 ответа

От php.net

<?php
function isValidDateTime($dateTime)
{
    if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $dateTime, $matches)) {
        if (checkdate($matches[2], $matches[3], $matches[1])) {
            return true;
        }
    }

    return false;
}
?>
23
ответ дан Darryl Hein 30 April 2009 в 05:35
поделиться

дата эха ('Y-m-d', strtotime ($date));

результаты в: "1999-11-30"

результат strtotime 943920000 - это - число секунд, примерно, между эпоха Unix (основа, от которой время измеряется), до 30.11.1999.

существует , зарегистрировал mysql ошибка на mktime(), localtime(), strtotime() все возвращающие это нечетное значение, когда Вы пробуете время перед эпохой (включая "0000-00-00 0:00:00"). Существуют некоторые дебаты по связанному потоку относительно того, является ли это на самом деле ошибкой:

, Так как метка времени запускается с 1970, я не думаю, что она предположила для работы в так или иначе.

Ниже функция, которую я использую для преобразования dateTimes, такого как вышеупомянутое к метке времени для сравнений, и т.д., который может быть несколько полезным Вам для дат вне "0000-00-00 0:00:00"

/**
 * Converts strings of the format "YYYY-MM-DD HH:MM:SS" into php dates
 */
function convert_date_string($date_string)
{
    list($date, $time) = explode(" ", $date_string);
    list($hours, $minutes, $seconds) = explode(":", $time);
    list($year, $month, $day) = explode("-", $date);
    return mktime($hours, $minutes, $seconds, $month, $day, $year);
}
2
ответ дан ConroyP 30 April 2009 в 05:35
поделиться

Не ожидайте когерентные результаты, когда Вы будете вне диапазона:

календарные объекты даты cf strtotime

cf Гну .html

"В течение числовых месяцев, формат ISO 8601 ‘year-month-day’ позволяется, где год является любым положительным числом, 1118-месячный число между 01 и 12 , и 1119-дневный число между 01 и 31 . Начальный нуль должен присутствовать, если число - меньше чем десять".

Так '0000-00-00' дает странные результаты, это логично!

<час>

"Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому Ваш диапазон дат может быть ограничен не ранее, чем эпоха Unix . Это означает, что, например, %e, %T, %R и %D (могло бы быть больше), и , даты до Jan 1, 1970 не будут работать над Windows, некоторыми дистрибутивами Linux и несколькими другими операционными системами ".

<час> cf strftime

Использование checkdate функционируют вместо этого (более устойчивый):

1115-месячный: 1122-месячное между 1 и 12 содержащих .

1116-дневный: день в позволенном количестве дней в течение данного месяца. Високосный год s учтен.

1117-летний: 1123-летнее между 1 и 32 767 содержащих .

1
ответ дан user22960 30 April 2009 в 05:35
поделиться

Пробовали ли вы получить доступ через $ _ SERVER superglobal?

print $_SERVER["HTTP_REFERER"];
-121--3526123-

Вообще говоря, «обратный вызов» находится под контролем процесса обнаружения. Итак, вы говорите менеджеру GUI «вызвать myaction при нажатии этой кнопки», а менеджеру GUI вызвать действие при нажатии кнопки.

Обработчики событий, с другой стороны, работают на одном удаленном шаге. Диспетчер GUI настроен на отправку сообщений обработчику событий. Менеджер событий сообщает, что нажатие кнопки выполняется программой myaction . Когда кнопка нажата, менеджер GUI помещает сообщение в очередь обработчика событий и переходит к управлению GUI. Обработчик событий забирает сообщение из очереди, видит нажатие кнопки, запускает программу myaction и переходит к обработке следующего события. Обычно программа myaction выполняется как независимый поток или даже как отдельный процесс.

В то время как образец «обработчик событий» является более сложным, он намного надежнее и реже зависает при сбое действия. Это также обеспечивает более быстрый графический интерфейс пользователя.

-121--977882-

Если вы просто хотите обработать преобразование даты без времени для поля даты mysql, вы можете изменить этот отличный код, как я сделал. На моей версии PHP без выполнения этой функции я получаю «0000-00-00» каждый раз. Раздражает.

function ConvertDateString ($DateString)
{
    list($year, $month, $day) = explode("-", $DateString);
    return date ("Y-m-d, mktime (0, 0, 0, $month, $day, $year));
}
1
ответ дан 1 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: