|
|
|
| $week = date("W");
количество недель в году будет всегда 52 или может быть разное?
а и можно ли по номеру недели определить ее начало и конец пример:
с 19.10.2009 по 25.10.2009 | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 01:01)
| | ? | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 01:01)
| | Сколько дней может быть в году? | |
|
|
|
|
|
|
|
для: Саня
(28.10.2009 в 21:13)
| | да сколько дней не важно меня интерисует date("W"); будет всегда 52 просто делаю навигацию по рейтингу по неделям в базу записываю
пример 2009.43
вопрос еще в том можно ли имея год и номер недели получить дату начала недели и конц недели | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 21:20)
| | > ...можно ли имея год и номер недели получить дату начала недели и конц недели
Можно. | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 21:20)
| | Сначала вычисляете какое число будет чезез $w недель (начиная с начала года). Затем узнаёте какой это день недели. Если не понедельник, то отнимаете время, чтобы получился понедельник. Это и будет начало недели. Ну а конец будет ровно через 7 дней.
Рекомендую производить вычисления в unix timestamp. | |
|
|
|
|
|
|
|
для: Саня
(28.10.2009 в 21:31)
| | если не трудно примечик моно | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 21:33)
| | Сначала сами попробуйте. Это же элементарно. Я дам наводящие советы, если это будет необходимо.
Собственно для всей задачи понядобятся функции mktime(), date() и оператор сложения. | |
|
|
|
|
|
|
|
для: Саня
(28.10.2009 в 21:36)
| | ок попробую | |
|
|
|
|
|
|
|
для: Саня
(28.10.2009 в 21:31)
| | Не надо в unix timestamp.
Человек со временем не работает - зачем такие ограничения...
jd_to_gregorian вполне пойдет. | |
|
|
|
|
|
|
|
для: Trianon
(28.10.2009 в 22:04)
| | А в чём выгода? Всё равно прийдётся вызывать date() для определения дня недели. | |
|
|
|
|
|
|
|
для: Саня
(28.10.2009 в 23:52)
| | Необязательно.
А выгода в том, что спокойно будут обрабатываться даты вроде моего дня рождения. | |
|
|
|
|
|
|
|
для: Trianon
(29.10.2009 в 02:13)
| | Приведите мне несколько пар год-неделя. Я протестирую свой "штампованый" скрипт. | |
|
|
|
|
|
|
|
для: Саня
(29.10.2009 в 02:22)
| | Я имею в виду - даты ранее 1970
На них сбои бывали, как минимум на старых версиях php.
И совершенно очевидно - на сопряженке с MySQL.
Так как MySQL отрицательные таймштампы тупо не берет | |
|
|
|
|
|
|
|
для: Trianon
(29.10.2009 в 02:33)
| | И что, теперь не пользоваться штампами совсем?
> Так как MySQL отрицательные таймштампы тупо не берет
Для этого есть специальные типы —DATETIME, DATE. Не мне вам об этом говорить... | |
|
|
|
|
|
|
|
для: Саня
(29.10.2009 в 07:05)
| | чето не срастается при при переходе с 8 января 2009 почемуто дата не 1 января а 31 декабря получается
притом номер дня недели 4 остается а 31 получается 3 день недели
$week = $temp_week * 7 * 86400;
$weekDay = date("w",$week);
$weekDay_ = date("j",$week);
$weekDay__ = date("F",$week);
|
может я чето неправильно делаю | |
|
|
|
|
|
|
|
для: gurza
(29.10.2009 в 09:27)
| | Весь код покажите. | |
|
|
|
|
|
|
|
для: Саня
(29.10.2009 в 09:32)
| | вот
$temp_year = $_GET["w"] ? substr($_GET["w"], 0, -2) : date("Y");
$temp_week = $_GET["w"] ? substr($_GET["w"], 4, 2) : date("W");
$week = $temp_week * 7 * 86400;
$weekDay = date("w",$week);
$temp_week = $temp_week - 1;
if ($temp_week <= 9){$temp_week = "0".$temp_week."";}
if ($temp_week!=0)
{
$ac_week_prev = $temp_year.$temp_week;
}
else
{
$temp_year = $temp_year - 1;
$temp_week = $temp_week - 1;
$ac_week_prev = "".$temp_year."52";
}
$monDay = ($weekDay - 1) * 86400;
$monDay = $week - $monDay;
$fDay = date("d",$monDay);
$fMonth = date("n",$monDay);
$monthArr = array("none","Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Окрября","Ноября","Декабря");
$Month = $monthArr[$fMonth];
$actual = !$_GET["w"] ? "<br /><b>текущая неделя</b> <br /><br />" : "<br /><b> c $fDay $Month</b><br /><br />";
$HTML.= "$actual <a href=\"chart/".$_GET["chartId"]."/$ac_week_prev\">« предыдущая неделя</a> ";
|
| |
|
|
|
|
|
|
|
для: gurza
(29.10.2009 в 20:23)
| | во немного переделал
но всеравно при переходе на 2008 год чето нетовместо понедельник 29 первый день идет как 28 число а это воскресение может гдето ошибка в расчете
$temp_year = $_GET["w"] ? substr($_GET["w"], 0, -2) : date("Y");
$temp_week = substr($_GET["w"], 4, 2);
$week = $temp_week * 7 * 86400;
if ($temp_week!="01")
{
$temp_week = $temp_week - 1;
if ($temp_week <= 9){$temp_week = "0".$temp_week."";}
$ac_week_prev = $temp_year.$temp_week;
}
else
{
$temp_year = $temp_year - 1;
$temp_week = $temp_week - 1;
$ac_week_prev = "".$temp_year."52";
}
$monthArr = array("none","Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Окрября","Ноября","Декабря");
$weekDay = date('w', $week);
$prev = (14+$weekDay-1) %7;
$fDay = date("d",$week - 86400*$prev);
$fMonth = date("n",$week - 86400*$prev);
$valid_date = mktime(0, 0, 0,$fMonth,$fDay,$temp_year);
$sun = (7 * 86400) +$valid_date;
$sDay = date("d",$sun);
$sMonth = date("n",$sun);
$Month = $monthArr[$fMonth];
$Month_ = $monthArr[$sMonth];
if (substr($_GET["w"], 4, 2) != date("W")){ $actual = "".substr($_GET["w"], 4, 2)."<br /><br /><b> c $fDay $Month $temp_year по $sDay $Month_ ".date("Y",$sun)."</b><br /><br />";}else{ $actual = "<br /><b>текущая неделя</b> <br /><br />"; }
$HTML.= "$actual <a href=\"chart/".$_GET["chartId"]."/$ac_week_prev\">« предыдущая неделя</a> ";
|
| |
|
|
|
|
|
|
|
для: gurza
(30.10.2009 в 10:21)
| | date('w') возвращает 0 для воскресенья, 1 для понедельника и далее. | |
|
|
|
|
|
|
|
для: Саня
(30.10.2009 в 13:55)
| | это понятно ну а что не правильно я делаю все идет нормально пока не переходит на другой год | |
|
|
|
|
|
|
|
для: gurza
(30.10.2009 в 14:26)
| | кажись все понял | |
|
|
|
|
|
|
|
для: gurza
(30.10.2009 в 20:03)
| | все разобрался вот че получилось
<?
$temp_week = 52;
$temp_year = 2009;
$week = $temp_week * 7 * 86400;
$beg_week_td = mktime(0, 0, 0, date("m", $week), date("d", $week), $temp_year);
$today = getdate($beg_week_td);
$prev = (14+$today['wday']-1) %7;
$monthArr = array("none","Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Окрября","Ноября","Декабря");
$fDay = date("d",$beg_week_td - 86400*$prev);
$fMonth = date("n",$beg_week_td - 86400*$prev);
$fYear = date("Y",$beg_week_td - 86400*$prev);
$sun = $beg_week_td - 86400*$prev + 86400 * 6;
$sDay = date("d",$sun);
$sMonth = date("n",$sun);
$sYear = date("Y",$sun);
echo "c ".$fDay." ".$monthArr[$fMonth]." $fYear по ".$sDay." ".$monthArr[$sMonth]." $sYear<br />";
?>
|
| |
|
|
|
|
|
|
|
для: gurza
(30.10.2009 в 20:25)
| | а вот сразу не заметил почему первая неделя 2009 у меня получается с 5 по 11 января а надо тоб было с 29 декабря 2008 по 4 января 2009 | |
|
|
|
|
|
|
|
для: gurza
(30.10.2009 в 21:17)
| | мне кажется что неправильно высчитывает неделю
$week = $temp_week * (24*60*60*7);
|
| |
|
|
|
|
|
|
|
для: gurza
(31.10.2009 в 13:32)
| | ни каких идей у меня получается что счас не 45 неделя а 46
c 09 Ноября 2009 по 15 Ноября 2009
$week = $temp_week * (24*60*60*7);
|
| |
|
|
|
|
|
|
|
для: gurza
(02.11.2009 в 13:26)
| | $week = ($temp_week - 1) * 7 * 86400; | |
|
|
|
|
|
|
|
для: Саня
(02.11.2009 в 14:11)
| | я так уже пробывал дело в том что тогда при переходе на 2010 год 53 неделя
c 28 Декабря 2009 по 03 Января 2010
и она же получается первой неделей 2010 т.е на неделю меньше все становится | |
|
|
|
|
|
|
|
для: gurza
(02.11.2009 в 14:36)
| | Откуда у вас взялась 53 неделя? | |
|
|
|
|
|
|
|
для: Саня
(02.11.2009 в 16:04)
| | смотрю в мобилке а что есть отличие | |
|
|
|
|
|
|
|
для: gurza
(28.10.2009 в 01:01)
| | Я встречал три типа календарей:
1. Первой считается неделя, в которой присутствует 1 января.
2. Первой неделей считается неделя, следующая за неделей в которой присутствует 31 декабря.
3. Если 1 января выпадает на пятницу-воскресенье, то первая неделя считается как в п. 2. Иначе как в п. 1.
В мобильниках 3 вариант. Собственно проблема решается отловом дня недели первого января искомого года. И если пт-вс, то прибавить дней до понедельника. Соответственно на пн-чт отнимается время. | |
|
|
|
|
|
|
|
для: Саня
(02.11.2009 в 23:00)
| | date("W") всегда даст в году 52 недели? | |
|
|
|
|
|
|
|
для: gurza
(03.11.2009 в 21:56)
| | Проверьте. А потом скажете мне. | |
|
|
|