php проверка валидности даты
Самый простой способ проверить валидность даты?
Нужно проверить валидность даты (30 февраля считать невалидным, учитывать високосный год 29 февраля)
Решения нет. Можно только создать дату разными способами и получить в разном виде. Валидации нет.
Так что за ответ низачот.
@azrail_dev: читать можно что угодно. И написать что угодно. Мне нужен «самый простой способ».
Сложных способов у самого по проектам понапихано хоть попой кушай.
Во первых на воод даты нужно поставить селектор даты. Это реально поможет пользоватеям вводить дату без ошибок.
При вводе данных рукой нужно сделать фильтр на ввод данных что бы в другом формате было нельзя ввести. Использовать что то типа маски ввода. Есть готовые скрипты маски ввода.
Если нужно проверить то тебе нужно проверить строку а не дату. Можно проверить регуляркой. 30 февраля это валидная дата. Так как это 1е или 2е марта в реале. Например как ты получишь какой день последний в феврале? Ты введшь 0 марта. Это будет последний день ферраля не важно 28 или 29 дней в месяце.
Так что технология проверки дат, лежит в основном в технологии ввода даты.
Не важно как попадает дата в селектор, задача стоит проверить её валидность с заданными условиями. Вопрос кошерных регулярок и прочих способов отсеять неверные символы здесь не обсуждается.
30 февраля невалидная дата, по изначальному условию. Не важно как эту проблему решает какой-либо код (пусть это даже конструктор даты в языке). Важно что в ТЗ стоит задача что 30 февраля ввести нельзя =) Мало того, 29 февраля в невисокосный год тоже является невалидной датой.
Так что ответ не соответствует поставленной задаче.
@Serhioromano: ну собственно сейчас я везде так и делаю. Сравниваю дни, недели и год из созданной даты с тем что передавалось в конструктор.
Но я этот вопрос задал чтобы найти самый простой путь. А то это решение некрасивое какое-то.
@murzix можно посмотреть ваш код как вы это исполнили? Потому что можно сделать прототип для объекта строки и будет что то вроде.
Проверка корректности даты в PHP
Достаточно часто в PHP приходится проверять дату на корректность. Например, проверить дату рождения, введённую пользователем. Проверок, на самом деле, очень много. Тут нужно проверить, чтобы не было 13-го или 0-го месяца, чтобы не было 31-го июня или 30-го февраля. С другой стороны, 31 июля быть может. Таким образом, проверка даты на корректность в PHP является непростой задачей. Однако, делается это всё с помощью одной строчки.
В PHP есть одна замечательная функция, которая называется checkdate():
Поскольку 31-го июня не существует, функция checkdate() вернулся false, а вот 31-е июля существует, поэтому было возвращено true.
Вот такая простая в применении функция выполняет очень сложную проверку, тем самым, облегчая жизнь программисту.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 8 ):
Ну а чего вы хотели грандиозного? Я считаю, что очень полезная. Я например не знал про эту функцию. Все, даже самые коротки статьи на этом сайте великолепны. «мусора» я тут не видел. А что-то грандиозное рассказывается в видео уроках, платных и бесплатных
Читайте внимательнее! Я никого не переубеждаю. Просто тоже выразил своё мнение! Согласен. Думаю, нам нужно закончить этот спор.
привет.михаил,если я нарежу html страницу сайта на блоки.например на футер,хедер,левы,правый блок,контент.сделаю этим блокам расширение php.создам файл index.php и в нем через include подключу к нему эти блоки.если я загружу это все дело на хостинг сайт при наборе адерса отобразиться или как?или нужен еще файл config где в нем будет указано url адрес сайта и т.д.спасибо?
Всё будет работать, config нужен больше для движков.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
php date validation
Im trying to to set up a php date validation (MM/DD/YYYY) but I’m having issues. Here is a sample of what I got:
13 Answers 13
You could use checkdate. For example, something like this:
A more paranoid approach, that doesn’t blindly believe the input:
Though checkdate is good, this seems much concise function to validate and also you can give formats. [Source]
function was copied from this answer or php.net
REGEX should be a last resort. PHP has a few functions that will validate for you. In your case, checkdate is the best option. http://php.net/manual/en/function.checkdate.php
Nicolas solution is best. If you want in regex,
this will validate for, 01/01/1900 through 12/31/2099 Matches invalid dates such as February 31st Accepts dashes, spaces, forward slashes and dots as date separators
I know this is an older post, but I’ve developed the following function for validating a date:
This function working well,
Not sure if this answer the question or going to help.
We can use simple «date» input type, like below:
Then we can link DateTime interface with built-in function ‘explode’:
I tested it on Google Chrome and IE, everything works correctly. Furthemore, Chrome display simple additional interface. If you don’t write anything in input or write it in bad format (correctly is following: ‘1919-12-23’), you will get the first statement. If you write everything in good format, but you type wrong date (I assumed that nobody could born before XX century), your controller will send the second statement.
this regular expression valid for :
Remember that this will be cover all case of date and date time with (—) character
Регулярное выражение формата даты
Дата публикации: 2016-08-10
От автора: приветствую вас друзья. В этой статье мы с вами научимся составлять регулярное выражение для валидации даты и проверки формата даты. Приступим?
Итак, перед нами стоит задача составить шаблон регулярного выражения для проверки строки на соответствие формату даты. Задача, в общем-то, типовая, а значит, можно предположить, что в сети уже есть готовые решения для нашей задачи. Это действительно так. На сайте regexlib.com в разделе готовых регулярок мы можем найти и наш случай:
Здесь на выбор есть даже несколько вариантов, которые могут работать с тем или иным форматом даты. Так что можем взять уже готовую регулярку, если она нам подойдет.
С готовыми решениями регулярных выражений для даты мы разобрались. Теперь давайте попробуем составить свое. Сформулируем техзадание. Итак, нам подходят даты форматов YYYY-MM-DD или YYYY/MM/DD. Прочие варианты даты нас не устраивают.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Собственно, задача довольно проста и решается буквально в течение минуты:
Давайте разберем этот шаблон:
\d <4>— 4 цифры, идущие подряд
\d <2>— 2 цифры, идущие подряд
Все вроде бы замечательно и наш шаблон работает. Однако что будет, если пользователь введет в качестве разделителя между цифрами в первой позиции один символ, а во второй — другой?
Упс! Оказывается шаблон пропускает неправильный формат даты. Как же разрешить использовать только один разделитель — тот, который используется на первой позиции? Здесь нам помогут обратные ссылки.
Смотрите, каждый разделитель мы заключили в скобки с тем, чтобы их сгруппировать и указать возможность альтернативы — (-|\/). Буквально это можно прочесть как — (тире или слеш). Но кроме группировки скобки выполняют и другую функцию. Скобки запоминают все то, с чем совпала в строке, заключенная в скобки часть шаблона.
Соответственно, встретив первый разделитель (тире или слеш), он будет запомнен. И доступен он будет по обратной ссылке. Обратные ссылки нумеруются и доступны в таком виде: \1, \2…
То есть, на первый выбранный разделитель ссылается такая ссылка — \1. Она доступна внутри шаблона регулярного выражения, а потому мы можем вместо альтернативы для второго разделителя просто указать обратную ссылку, которая будет ссылаться на введенный первый разделитель:
А вот теперь все работает, как мы и задумывали, регулярное выражение для проверки даты составлено и успешно работает. Ну а на этом у меня сегодня все. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Хотите изучить регулярные выражения на PHP?
Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!
Дата и время в PHP
В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.
PHP-функции для работы с датой и временем
PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:
time() Возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX). getdate( ) Считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:
seconds | Секунды (0-59) |
minutes | Минуты (0-59) |
hours | Часы (0-23) |
mday | День месяца (1-31) |
wday | День недели (0-6), начиная с воскресенья |
mon | Месяц (1-12) |
year | Год |
yday | День года (0-365) |
weekday | Название дня недели (например, Friday) |
month | Название месяца (например, January) |
0 | Абсолютное время |
Пример 1
РЕЗУЛЬТАТ ПРИМЕРА 1:
seconds = 54
minutes = 49
hours = 23
mday = 19
wday = 0
mon = 9
year = 2021
yday = 261
weekday = Sunday
month = September
0 = 1632084594
Сегодня: 19.9.2021
date() Форматирование даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. Строка формата может содержать следующие коды:
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту «\». Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку «n», то надо ввести «\\n», поскольку «\n» является символом новой строки.
Пример 2
РЕЗУЛЬТАТ ПРИМЕРА 2:
Сегодня 19.09.21 23:49
часы
минуты
секунды
месяц
день месяца
год
Пример 3
РЕЗУЛЬТАТ ПРИМЕРА 3:
22 January 1971, at 1.30 pm, Friday
Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.
Пример 4
РЕЗУЛЬТАТ ПРИМЕРА 4:
Sunday 19 September 2021 23:49
Сегодня Sunday 19 September 2021 23:49:54
MSK