|
|
|
| Доброго времени суток
существует простая функция вычисления 1 дня недели
date("w",mktime(0,0,0,01,1,2006));
но столкнулся с парадоксом...
попробуйте сами поставить август или сентябрь (08 или 09) в 2006 и 2007 ( больше не проверял ) годах
в 2006 выдает что в обоих месяцах 1 день недели это 4 ( четверг ) а в 2007 что типа 5 ( пятница)
что это за глюк и как это исправить?
ну а вообще у меня вопрос стоит как узнать число месяца если известно что это второе например воскресенье или третий понедельник | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 05:27)
| | Потому что и 08 и 09 - это не числа.
В восьмеричной системе счисления нет ни цифры 8, ни цифры 9. | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 10:06)
| | тоесть если у меня исходные данные представлены напрример в нормальном русском формате 01.08.1983
я не смогу эти данные подставить не удалив снгачала нули? | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 10:42)
| | Куда и как Вы собираетесь подставлять данные?
Исходные данные обычно представлены в строках, а не в числах. | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 05:27)
| | Дело в том, что компьютеры, языки программирования разрабатываются не в России, а на Западе, а там неделя начинается с воскресенья, а не с понедельника. Кроме того у функции mktime() дебильный синтаксис, в приведённом примере 01 - это месяц, а 1 - это число... | |
|
|
|
|
|
|
|
для: cheops
(18.07.2006 в 12:19)
| | брр совсем вы меня запутали
я делаю небольшой скриптик вывода праздников и событий
когда праздник задан конкретно тоесть например 12.09 то вычислить через сколько он будет и вывести его если это сегодня не составляет труда.
НО есть даты типа последнее воскресение марта ( перевод часов )
в базе эта дата хранится как U5.03
или например второй понедельник августа P2.08
вот из этих данных мне надо получить число дня, вырезать нули из месяца не проблема , как точно узнать какое это будет число.
тоесть вот плиз покажите на примере как из U5.3.2007 получить 25.3.2007 | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 12:49)
| | U и P - что означают? И что означает цифра 5 - это код воскресенья или что-то другое? | |
|
|
|
|
|
|
|
для: cheops
(18.07.2006 в 13:06)
| | Это просто условные обозначения дня недели
U - воскресение
P - понедельник
V - вторник
W - среда
C - четверг
F - пятница
S - суббота
а цифра рядом обозначает какой по счету это будет день
тоесть
U1 - первое воскресение
U2 - второе воскресение
U3 - третье воскресение
U4 - четвертое воскресение
цифра 5 обозначает что это самое последнее, тоесть не важно 4 оно будет или 5.
Вот например U5.03 это последнее воскресение марта | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 12:49)
| | А осенний перевод как обозначен? U5.10 ?
Показали бы значения всех буковок. Для всех дней недели.
to cheops: в U5.03 - пятерка наверное обозначает последний день недели. | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 13:15)
| | да осенний именно U5.10
или например
P2.10 Начало всемирной недели письма ( второй понедельник октября )
PS
я выше расшифровал все дни | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 13:30)
| |
<?
$str = 'U5.10'; //'18.07.2006' 'P2.08.2008'
@list($dd, $mm, $yyyy)=explode('.', $str);
if(!$yyyy) $yyyy = intval(date('Y'));
$mm = intval($mm); $yy = intval($yyyy);
if(is_numeric($dd)) $dd = intval($dd);
else
{
$weekday = strpos("UPVWCFS",$dd[0]);
$wdnum = intval($dd[1]);
$monthstart = mktime(12,0,0,$mm, 1, $yyyy);
$mswkday = date('w', $monthstart);
$need = ((($weekday+7-$mswkday)%7)+7*($wdnum-1));
$need = $monthstart + $need *86400;
if($mm != date('n', $need))
$need -= 7*86400;
$dd = intval(date('j',$need));
}
echo "$dd.$mm.$yyyy ".date('l', mktime(12,0,0,$mm,$dd,$yyyy));
?>
|
Правда, этот скрипт не проверяет, прошла ли уже дата в этом году или еще нет. | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 14:13)
| | вот что значит гуру, пойду пробовать заранее огромное спасибо, а проверка эта не нужна
у меня сделано если сечас например 8 месяц а в искомой дате месяц равно или больше 8 то год посдчталяеться этот, а если меньше то следущий.
счас все это попробую соединить ) | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 14:43)
| | уважаемые гуру, дабы не постить кучу постов, поробую вас попросить сдесь.
можно ли каким то образом уменьшить код?
$den="дней";
if($den2==2)$den="дня";
if($den2==3)$den="дня";
if($den2==4)$den="дня";
if($den2==02)$den="дня";
if($den2==22)$den="дня";
if($den2==32)$den="дня";
if($den2==42)$den="дня";
if($den2==52)$den="дня";
if($den2==62)$den="дня";
if($den2==72)$den="дня";
if($den2==82)$den="дня";
if($den2==92)$den="дня";
if($den2==03)$den="дня";
if($den2==23)$den="дня";
if($den2==33)$den="дня";
if($den2==43)$den="дня";
if($den2==53)$den="дня";
if($den2==63)$den="дня";
if($den2==73)$den="дня";
if($den2==83)$den="дня";
if($den2==93)$den="дня";
if($den2==04)$den="дня";
if($den2==24)$den="дня";
if($den2==34)$den="дня";
if($den2==44)$den="дня";
if($den2==54)$den="дня";
if($den2==64)$den="дня";
if($den2==74)$den="дня";
if($den2==84)$den="дня";
if($den2==94)$den="дня";
if($den2==01)$den="день";
if($den2==21)$den="день";
if($den2==31)$den="день";
if($den2==41)$den="день";
if($den2==51)$den="день";
if($den2==61)$den="день";
if($den2==71)$den="день";
if($den2==81)$den="день";
if($den2==91)$den="день";
if($den2==11)$den="дней";
if($den2==12)$den="дней";
if($den2==13)$den="дней";
if($den2==14)$den="дней";
|
| |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 17:08)
| |
<?
function dys($n)
{
$m = $n %10; $u = $n %100; $w = array(' дней',' день',' дня' );
if($u >=5 && $u <= 20) $m=0; else if($m >= 5) $m=0; else if($m >= 2) $m=2;
return $w[$m];
}
for($i = 0; $i < 366; $i++) echo $i.dys($i).'<br>';
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 17:35)
| | блин и откуда вы все это знаете? :) СЕНКС ОГРОМНЫЙ
блин пока писал еще одна проблема вылезла
вот например запрос к базе
напомню в базе хранятся даты вида
12.06.2003
14.05
23.03.1070
WHERE data LIKE '%.05%' - он выведет все даты за май месяц
а как можно сделать что бы он выдал даты за период с мая по август ( с 05 по 08 ) и при этом этот параметр нужно задать до запроса, я уж и так и так , а в результате шиш...
хотя пока писал вопрос подумал что этот запрос тоже не идеален, если запрос будет
%.10% то он выведет не только все за 10 месяц но и все даты начинающиеся на 10 типа 1037
вот такая проблема, я понимаю что уже надоел наверно, прошу не ругайтесь сильно, я только учусь... | |
|
|
|
|
|
|
|
для: kazakru
(18.07.2006 в 18:00)
| | с помощью LIKE Вы этого не добьетесь.
тут нужен SELECT .... WHERE SUBSTRING(data, 4, 2) BETWEEN '05' AND '08' | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2006 в 18:06)
| | блин, уже и книжку купил для чайников, но все равно там такого не найти, тут нужен опыт.
Еще раз извиняюсь и огромное еще раз спасибо, постараюсь больше не надоедать вам. | |
|
|
|