2009-08-01 4 views
3

Это двойной вопрос с точки зрения удобства использования переднего плана и проверки подлинности PHP DATE_TIME.Лучший способ ввода и проверки пользовательского datetime в форме PHP

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

Я сохраняю даты как DATE_TIME в SQLite db.

Я хочу, чтобы требовал от клиента ввода не менее года и месяца, с возможностью добавления дня, часа, минуты, секунды в DATE_TIME. Если они не установлены, они будут по умолчанию иметь наименьшее число.

Я думал, что лучший способ и проще всего сделать это - сделать единую входную форму, введя вход (слева) и сделать результат (справа). Использование формата xxxx/xx/xx/xx/xx/xx в качестве формата.

2009/08  = 2009-08-01 00:00:01 
2009/08/01 = 2009-08-01 00:00:01 
2009/08/01/05 = 2009-08-01 05:00:01 

(добавив одну секунду по умолчанию в противном случае это будет день раньше)

Я попытался первым взрывом ввод в массив и проверки каждой секции даты с помощью регулярного выражения. он стал беспорядочным, и я не могу понять, как проверить правильные диапазоны, скажем, [1980-2009]/или/[01-12]/(это не работает, как я ожидал). Также/[(0-9) {2}]/не будет работать в течение месяца, очевидно.

Другой вариант делает каждую секцию даты отдельным полем выбора. Предоставление каждого поля за месяц необязательно. Но это становится бесполезным в выходе html, также учитывая, что каждый месяц не имеет 31 дня, мне понадобится javascript, чтобы изменить поле дня в зависимости от того, какой месяц выбран. Это слишком много. Также кажется, что намного проще и быстрее использовать одно поле.

Что вы предлагаете, это лучший способ ввода и проверки пользовательских дат?

ответ

7

Я бы рекомендовал позвонить по телефону strtotime(), чтобы он мог ввести различные форматы даты, включая месяц/год, день/месяц/год, день/месяц/год: минуты и год -дневные часы: минуты

Если strtotime не может определить, что такое дата, оно возвращает false (или -1 в старых версиях PHP, проверьте ваше руководство). SO ваш общий код будет:

  1. Выполнить вход через stripslashes (при необходимости) и StrToTime
  2. Проверьте значение === ложно. Если да, то ошибка отображения
  3. В противном случае, формат времени, как база данных йор ожидает использует date()
+0

Вот именно! Благодарю. Мальчику это намного проще. – user73119

+0

Кажется, это не просто год/месяц ... meh, я заставлю его войти в день. Большая гибкость в этой функции! Еще раз спасибо за указание! – user73119

+0

Вы правы - я был неправ. С одной косой чертой, т.е. 8/1, функция предполагает, что месяц/день (/ текущий год) – Josh

Смежные вопросы