Разница в датах с 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 дня