Разница в датах с 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 (последний;): Идите с ответа Алекса