Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с датами, сравнение
 
 автор: Zilog   (09.06.2009 в 02:30)   письмо автору
 
 

Есть несколько периодов дат (на примере их четыре: A,B,C и D).

||--------A---------||-----------B---------||-----------C-----------||------------D----------||
.............................................. {Uf------------ user select --------------Ut} ............

Каждый описывается хранится в БД двумя полями timestamp, куда планируется заносить даты в формате дд.мм.

Есть две даты заданные пользователем, в таком же формате день-месяц.

Вопрос - как бы сделать сравнение дат (какие периоды задеваем), как скажется на сравнении отсутствие данных по году в обоих случаях?

И ещё вопрос: я правильно понял, что метка времени Unix и mysql timestamp - разные вещи?

  Ответить  
 
 автор: nikita2206   (09.06.2009 в 02:54)   письмо автору
 
   для: Zilog   (09.06.2009 в 02:30)
 

<?
$date1 
= time() - (3600 * 24 * 2); // позавчера
$userdate = time() - (3600 * 24 * 1); // вчера
$date2 = time(); // сегодня
if(($userdate < $date2 && $userdate > $date1) || ($userdate > $date2 && $userdate < $date1)) echo date('Y-m-d H:i:s', $userdate).' - Находится между: '.date('Y-m-d H:i:s', $date1).' и '.date('Y-m-d H:i:s', $date2);

— этот код подходит под проверку одной даты, если надо две, то просто надо додумать…
или вам надо сделать проверку, входит ли промежуток дат в другой промежуток, и этот промежуток вывести???

  Ответить  
 
 автор: Zilog   (09.06.2009 в 11:56)   письмо автору
 
   для: nikita2206   (09.06.2009 в 02:54)
 

>или вам надо сделать проверку, входит ли промежуток дат в другой промежуток, и этот промежуток вывести???

Или. Только промежутков, с которыми надо делать проверку - несколько.
Формат даты выбрал Unix timespamp. Год для всех случаев устанавливаю принудительно - 1970, ибо мне важны только месяца и дни.
Само сравнение пока ещё не делал.

  Ответить  
 
 автор: тест!ывфыв   (09.06.2009 в 22:22)
 
   для: Zilog   (09.06.2009 в 11:56)
 

тест тест

  Ответить  
 
 автор: nikita2206   (10.06.2009 в 01:00)   письмо автору
 
   для: Zilog   (09.06.2009 в 11:56)
 

<?
function dateInDate($dateA1, $dateA2, $dateB1, $dateB2){
    if(
$dateA1 > $dateA2) list($dateA1, $dateA2) = array($dateA2, $dateA1);
    if(
$dateB1 > $dateB2) list($dateB1, $dateB2) = array($dateB2, $dateB1);
    
    if(
$dateB1 <= $dateA1 && $dateB2 > $dateA1) $dateBetween = array($dateA1, $dateB2 < $dateA2 ? $dateB2 : $dateA2);
    elseif(
$dateB1 > $dateA1 && $dateB2 > $dateA1) $dateBetween = array($dateB1, $dateB2 < $dateA2 ? $dateB2 : $dateA2);
    else 
$dateBetween = FALSE;
    return 
$dateBetween;
}
$day    = 3600 * 24;
$result = dateInDate(time() - $day * 5, time() + $day * 5, time() - $day * 7, time() + $day * 3);
if(!
$result) echo 'Совпадений не найдено.';
else echo 
'Begin in: '.date('Y-m-d', $result[0]).' and ends in: '.date('Y-m-d', $result[1]);

— Вот такая функция должна, я надеюсь, работать. Возвращает FALSE, если промежутки не пересекаются, иначе возвратит массив, в котором описан пересекающийся промежуток "от" и "до"…

П.С. насколько я помню, да, unix timestamp и mysql timestamp - это абсолютно разные вещи, покрайней мере вот такой код:
mysql_query('INSERT INTO `table` (`time`) VALUES ('.time().')'); // столбец time - timestamp'овый
запишет в БД: 0000-00-00 00:00
поэтому надо так записывать:
mysql_query('INSERT INTO `table` (`time`) VALUES ('.date('YmdHis' [, $timestamp]).')');
и так доставать:
$timestamp = strtotime($row['time']);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования