PHP strtotime () против date.js parse () - PullRequest
       9

PHP strtotime () против date.js parse ()

1 голос
/ 03 февраля 2012

У меня есть веб-сайт, на котором пользователи могут вводить свои собственные даты перед отправкой на сервер. Поэтому мне, очевидно, нужно проанализировать то, что мне дают, и перевести в стандартный формат, прежде чем использовать его. Поэтому я использовал PHP-функцию strtotime () , которая довольно проста в отношении того, что она примет в качестве ввода.

Но я также использую date.js на сайте, и его функция parse () тоже довольно хороша. Должен ли я использовать это на входе пользователя перед отправкой на сервер? Какой из них лучше?

Я сохраню strtotime () на стороне сервера для безопасности, но если date.js лучше, я добавлю это клиенту.

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

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Пока вы чувствуете, что strtotime() отвечает вашим потребностям, нет веских причин менять его на стороне клиента.Тем не менее, strtotime() делает пару предположений, которые необходимо учитывать:

Из документации strtotime():

Даты вФорматы m / d / y или dmy устраняются, рассматривая разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y;тогда как если разделителем является тире (-) или точка (.), то предполагается, что используется европейский формат dmy.

Если вы разрешаете своему клиенту отправлять дату в любом формате, который они выбирают,вышесказанное может быть источником путаницы.Я только что проверил даты 5/1/12 и 5-1-12 в date.js, и оба были проанализированы как 1 мая 2012 года. PHP интерпретирует их как 1 мая 2012 года и 12 января 2005 года (!!) соответственно.

echo date("Y-M-n", strtotime("5/1/12"));
// 2012-May-5
echo date("Y-M-n", strtotime("5-1-12"));
// 2005-Jan-1 (whoops!)

Однако предварительное форматирование даты имеет очевидную выгоду от некоторой гарантии того, что введенная дата действительна.Сохранение strtotime() на сервере также гарантирует, что вам не нужен клиент с поддержкой JavaScript для отправки запросов.Ваш PHP все еще может называться веб-службой и т. Д., При этом клиенту не нужно быть веб-браузером.

0 голосов
/ 17 августа 2013

Оба.

Вам абсолютно необходимо проверить дату в PHP, потому что один или несколько ваших пользователей могли отключить Javascript.

Проверка Javascript хороша тем, что у вас может быть датавведите в элемент управления вводом, подтвердите его в обработчике onblur и запишите проверенную дату обратно в элемент управления.Таким образом, после того, как пользователь вводит дату рождения 2/5/01 и покидает элемент управления, дата изменяется на 2 мая 2001 года, и пользователь не только знает, что дата интерпретирована правильно, но и strtotime() также получает однозначное значение.

С точки зрения UX вы также можете использовать гораздо лучшие отзывы о проверке.Javascript может делать следующее (что, вероятно, хорошо известно, но мне понадобилось немного времени, чтобы найти его).Поместите элемент на страницу, например

<div id="DobReply"></div>;

. Тогда функция, которая проверяет дату рождения, может выполнять

document.getElementById("DobReply").innerHTML = "Current age is "+age; 

, где age - это переменная, рассчитанная на основе введенной даты рождения,и сегодняшняя дата.Как только пользователь покидает элемент управления, выскакивает вычисленный возраст, и если пользователь ввел текущий год (это происходит), он может сразу обнаружить ошибку.

Так что я не избавлюсь от datejsпроверка либо.Но все это теряется, если Javascript отключен, вы можете получить недопустимые даты, даты в странных форматах или что-то еще.Так что, если вы можете иметь только один, оставьте strtotime().

...