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

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

0 голосов
/ 26 ноября 2009

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

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

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

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

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

Большое спасибо за помощь Francesco

Ответы [ 4 ]

2 голосов
/ 26 ноября 2009

Конвертируйте ваши даты в Юлианский день с 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
}
1 голос
/ 26 ноября 2009

Выполните проверку на стороне клиента с помощью Javascript.

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

0 голосов
/ 26 ноября 2009

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

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

0 голосов
/ 26 ноября 2009

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 для сравнения / операции.

РЕДАКТИРОВАТЬ2 (последний;): Перейти с Алекс ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...