Intereting Posts
Неустранимая ошибка: исключить исключение SoapFault: Что делает CakePHP безопасным и как мы можем повысить его безопасность? как отключить сеанс при закрытии веб-страницы в php Получить имена полей формы HTML Как переопределить функцию запуска по умолчанию лезвия в laravel 5? Выбор значений атрибутов на основе другого значения атрибута с помощью SimpleXML httpd.exe Сбой при выполнении PHP-скрипта с MySql в нем Расчет PHP из html-формы Как сохранить значения флажка (0 или 1) в базе данных загрузка проекта codeigniter в качестве субдомена сервера использовать CRYPT_BLOWFISH на php 5.2, который не поддерживает его Как сохранить китайский или другой иностранный язык, как они есть, вместо того, чтобы превращать их в коды? Доступ к ассоциативному массиву с помощью целочисленного индекса в PHP Экземпляр класса без переменной MySQL PHP Escape String '\' – Почему он не сохраняется в базе данных с обратной косой чертой?

Разница в датах с php

Привет, ребята, мне было интересно, может ли кто-нибудь помочь мне в следующем:

У меня две даты введены в двух разных полях> startDate и endDate.

Когда они будут введены, я хотел бы показать предупреждение, если:

  • вторая – дата перед первой. Так что это неправильно.
  • и между первым и вторым существует минимальный разрыв не менее 3 дней в течение определенного периода года и 7 дней в течение других периодов года.

Я думал написать функцию PHP, но как мне ее называть, как только будет введена вторая дата?

Многое спасибо за помощь Франческо

Конвертируйте свои даты в Julian day вместе с gregoriantojd .

/** * Get the Julian day of a date. The Julian day is the number of days since * January 1, 4713 BC. */ function datetojd($date) { return gregoriantojd(idate('m', $date), idate('d', $date), idate('Y', $date)); } // you can use strtotime to parse a lot of date formats, assuming they are text $startDate = strtotime('22nd Nov 2009'); $finishDate = strtotime('26nd Nov 2009'); $diff = datetojd($finishDate) - datetojd($startDate); if ($diff < 0) { // oops, $finishDate is before $startDate } else { // check $diff is at least 3 or 7 depending on the dates } 

Сделайте проверку на стороне клиента с помощью Javascript.

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

Я не уверен, если вы можете вызвать его, как только будет введена вторая дата, если вы не перезагрузите страницу или не выполните функцию на другой странице, которая может быть немного сложной

То, как я проверил даты, – использовать функцию mktime php, которая даст вам время unix. Тогда, если второе меньше, чем первое, второе – раньше, а если второе меньше, чем первое + 3 * 24 * 60 * 60 (секунды через 3 дня), то оно не будет на 3 дня

Случай 1 °:

 SELECT [whatever you need from the table] WHERE endDate < startDate 

2 ° случай:

 SELECT [whatever you need from the table] WHERE (endDate - startDate) >= IF([select that define in wich period of the year the data are],3, 7) 

Это плохо делает трюк, но, вероятно, ваша проблема не может быть решена sql-side.

Пожалуйста, опишите, что вам нужно делать.

РЕДАКТИРОВАТЬ:

Хорошо, тогда как кто-то предложил, сначала проверьте htem на js (для удобства, а не для безопасного: никогда не полагайтесь только на проверку js!)

Используйте strtotime для сравнения / операции.

EDIT2 (последний;): Идите с ответа Алекса