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

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

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

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

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

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

Многое спасибо за помощь Francesco

Ответ 1

Преобразуйте свои даты в 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
}

Ответ 2

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

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

Ответ 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.

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

EDIT:

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

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

EDIT2 (последний;): Пойдите с ответ Alex

Ответ 4

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

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