Лучший способ ввода и проверки пользовательских даты и времени в форме PHP - PullRequest
4 голосов
/ 01 августа 2009

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

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

Я храню даты как DATE_TIME в базе данных SQLite.

Я бы хотел потребовать, чтобы клиент ввел хотя бы год и месяц , с возможностью добавления дня, часа, минуты и секунды к 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 для изменения поля дня в зависимости от того, какой месяц выбран. Это слишком много. Также кажется, что намного проще и быстрее использовать одно поле.

Как вы думаете, ребята, лучший способ ввода и проверки пользовательских дат?

1 Ответ

8 голосов
/ 01 августа 2009

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

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

  1. Выполнить ввод через полоски (при необходимости) и время выполнения
  2. Проверьте, равно ли значение === false. Если это так, отображается ошибка
  3. В противном случае отформатируйте время, которое, как ожидает ваша база данных, использует date ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...