Несколько вопросов по дате (date и прочее)

BeatBox

Guest
Несколько вопросов по дате (date и прочее)

У меня есть такая задача -
есть раздел новостей, по умолчания он показывает все новости. которые есть в базе (разбивая постранично). Мне нужно сделат ьтак:
чтобы он показывал новости за сегодня, а вверху разместить ссылки (слева и справа) -
"новости за предыдущий день"
"новости за следующий день".

Я уже сдела вывод новостей за сегодня вот так:
PHP:
$date_now = gettimeofday();
$now = date("Y-m-d", mktime($date_now));
и потом во время селекта в запросе пишу 'WHERE time like '$now'
like - потому что в базе даа записываеться как
ГОД-МЕСЯЦ-ЧИСЛО ЧАС-МИНУТА-СЕКУНДА.

Вот теперь думаю как выводиь новости за предыдущие дни.. написать что-ли функцию, которая будет передавать в $_GET
текущую дату минус единицу от дня, и запрос опять жубует выглядеть 'like....', и тут ещё проблема - что будет когда начнеться отниматься единица от первого числа?
Сижу доки на рнр.нет читаю, но пока что в голову ничего не пришло. Может быть кто-то уе такое делал, и я что-то просто не так начал делать? Помогите пожалуйста.

-~{}~ 19.03.05 17:58:

у меня ещё есть такая функция (писал не я, так что работает исправно :D) - она тоже выводит новости за указанный день, но там запрос более точный получаеть, да и вообще функция удобна, но мне ненравиться что ссылка получаеться вида:

http://www.сайт/page.php?name=News&f=day&year=2005&month=3&day=19
Как думаете, можно ли будет потом это ReWrite'ом переделать под вид:
http://сайт/news/месяц-число-год ?
Или слишком длинный УРЛ получаеться?

-~{}~ 19.03.05 18:06:

Да, вот ещё что хотел спросить:
команда:
$now = date("Y-M-d", mktime($date_now));
делает вместо числового названия месяца - название буквами .например для марта - Mar. Как можно сделать. чтобы выводило не Mar а "Марта"?
 

leхus

Guest
советую хранить дату как количество секунд с 1 января 1970 года...
time();
удобнее и гемороя меньше
 

BeatBox

Guest
у меня почему-то если хранить вв скундах, то все время дата - 01.01.1970 :(
 

Фанат

oncle terrible
Команда форума
leхus, советую тебе помолчать. и автору вопроса удобнее и тебе позора меньше.
 

BeatBox

Guest
о, все! настрои теперь показывает в секундах верно (чисо:месяц:год).
Фанат
Зря я это сделал?:)
 

Фанат

oncle terrible
Команда форума
BeatBox, по порядку.
1. тебе не приходило в голову, что
$now = date("Y-m-d")
выполняет ровно то же самое, что и твоё
$date_now = gettimeofday();
$now = date("Y-m-d", mktime($date_now));
только проще и понятнее?
при том, что можно вообще ничего в пхп не вычислять, а все сделать средствами бд

2. какой смысл читавть доки на пхп.нет, если от тебя требуется придумать примитивный АЛГОРИТМ? На пхп нет тебе напишут только, как написать твою программу. Но придумать её за тебя там не могут. В программировании, кроме пхп.нет ещё и собственная голова требуется. иногда

3. Текущую дату с арифметикой передавать не надо. Это не имеет смысла. Если ты будешь отматывать строго 1 день, то для этого гораздо удобнее пользоваться функцией mysql и она тебе спокойно все сделает сама.
http://dev.mysql.com/doc/mysql/ru/Date_calculations.html
http://dev.mysql.com/doc/mysql/ru/Date_and_time_functions.html

Однако и это делать будет некрасиво. А вдруг за какой день новостей нет? Нужную дату имеет смысл находить в том же скрипте - и предыдущую и следующую, двумя запросами.
находить следующую дату с новостями, и её уже передавать

-~{}~ 19.03.05 20:07:

о, все! настрои теперь показывает в секундах верно (чисо:месяц:год).
это тебе сильно помогло в решении твоих проблем?

-~{}~ 19.03.05 20:11:

урл переделай в http://www.сайт/page.php?name=News&f=day&date=2005-03-19
по хорошему, еще бы вместо дурацкого page.php?name=News написать news.php, но вас, ламеров, переучивать - себе дороже. тебе проще будет реврайтом, хотя куда ты туда впихнешь загадочное f=day - это будет отдельный аттракцион

-~{}~ 19.03.05 20:12:

чтобы выводило "марта" сделать можно.
для этого надо написать небольшую программу.
 

BeatBox

Guest
Фанат
я что-то немогу понять :( как мне средставми Sql отнять 1день от текущего? там с этими мертвыми животными вообще путанина :(:(
 

Фанат

oncle terrible
Команда форума
я тебе дал две ссылки.
как на ссылки нажимать, ты в состоянии понять?
а русский текст читать обучен?
похоже, что нет. если не въехал, что отнимать ничего не нужно. ну делай так, как понял.
 

BeatBox

Guest
просто я понял как сделать селект из базы, минус один день (по второй ссылке).
Но мне ещё нужно сформировать вверху нвостей "за сегодня" две ссылки - за перд. день и за след. день. Вот что я непойму :confused:
 

Фанат

oncle terrible
Команда форума
что ж за день-то сегодня такой.
один чудила не может переменную подставить вместо другой.
второй не может ссылки сделать по которым скрипт должен подставить единичку в запрос.
ты в туалет-то без посторонней помощи хочешь?
или найти, где бумажку оторвать тоже для тебя непосильная задача?

как сделать минус один понял? а как сделать плюс один - нет?
 

BeatBox

Guest
Фанат
НЕТ НЕ ПОНЯЛ! :(:(
Я же поэтому и спрашиваю.. ну непонимаю я :(
 

Фанат

oncle terrible
Команда форума
чё ты не понимаешь?
просто ссылки сделать, передавая в скрипт в скрипт дату и параметр "prediduschaja" или "sledujuschaja"? это так трудно - ссылку составить?
или запрос сделать, если "prediduschaja" - то подставить запрос с отниманием, а если следующая - то с прибавлением?
условный переход, который меняет минус на плюс - это непосильная задача?

-~{}~ 19.03.05 21:02:

просто я понял как сделать селект из базы, минус один день (по второй ссылке).
ну покажи нам, что ты понял
 

BeatBox

Guest
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);
получиться 1998-01-01 23:59:59

но Вы непоняли наверное какие мне ссылки нужно - конкретно эти ссылки не делают никаких запросов, они вообще ведут в другую функцию. А ссылки вида:

<a href=\"http://www.ig.com/page.php?name=News&f=day&year=$year&month=$month_num&day=$day\"><B>Новости за $day $month_name</B></A>

таких ссылки две.
например сегодня первое января.
Ссылка слева должна быть:

<a href=\"http://www.ig.com/page.php?name=News&f=day&year=2004&month=12&day=31\"><B>Новости за $day $month_name</B></A>

а справа -
<a href=\"http://www.ig.com/page.php?name=News&f=day&year=2005&month=01&day=01\"><B>Новости за $day $month_name</B></A>

Вот что я пытаюсь сделать :(
 

Фанат

oncle terrible
Команда форума
если тебе в ссылке так приспичило показывать день
и если до тебя так и не дошло, что день надо поулчать из базы, а не вычислать вручную, то так, как ты хочешь, тебе поможет вычисление через timestamp с поможью mktime
 

BeatBox

Guest
хм..
вот первый пример:
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
опять ничегон еясно :( Ну тупой я! :(
 

Фанат

oncle terrible
Команда форума
вместо 12, 32 и 1997 подставляй свои день, месяц и год
от дня отнимай (или прибавляй) 1
и формат даты поменяй
 

SelenIT

IT-лунатик :)
смело прибавляешь к/вычитаешь из своего дня единицу (то, что получаются дни типа 32 декабря или -1 января - не страшно), подставляешь это в mktime. Она прекрасно понимает, что ты имел в виду, и генерирует правильный unix_timestamp. А из него уже не составит проблему получить правильные компоненты даты с помощью date. Что здесь сложного?
 
Сверху