Автор Тема: Скрипт работы с датой!!!  (Прочитано 5683 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alan

  • -{ Наблюдатель }-
  • Старожил
  • ****
  • Сообщений: 493
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.krivoyrog.info
Скрипт работы с датой!!!
« : 02 Сентября 2003, 19:23:23 »
Люди,помогите написать скрипт. Очень срочно нада... сам пробовал... что-то не то ...
что должен делать:
нужно выводить дату каждой третьей пятницы ближайших четырёх месяцев и сколько до неё осталось дней. примерно так:
Сентябрь :19.09.03 ( 24)   Октябрь: 17.10.03 (54)   Ноябрь : 21.11.03 (84)  Декабрь : 19.12.03 (114)

Буду очень благодарен. Одна надежда на вас....
:: Тот кто поднялся выше, просто полез раньше ::
   

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Скрипт работы с датой!!!
« Ответ #1 : 02 Сентября 2003, 20:13:12 »
выведет третью пятницу девятого месяца, с другими, думаю, разберешься, дни посчитаешь, несложно будет.
А вообще я это не писал, просто иногда надо заглядывать в мануал и читать раздел Date and Time functions.
До нас уже давно все написано.

echo nthDayOfMonth(3,5,9,2003);

/* dayofweek() will return the day of the week a given date falls. 0=Sunday, 1=Monday, etc. */

function dayofweek($day,$month,$year) {

/* Check date for validity */
if (!checkdate($month,$day,$year))
return -1;

$a=(int)((14-$month) / 12);
$y=$year-$a;
$m=$month + (12*$a) - 2;

$retval=($day + $y + (int)($y/4) - (int)($y/100) + (int)($y/400) + (int)((31*$m)/12)) % 7;
return $retval;
}
/* phpdow_mod is a mod function that deals with negative numbers properly, used by the nthDayOfMonth function below. */
function phpdow_mod($a,$b) {
if ($a <= 0)
return (int)phpdow_mod($b-abs($a),$b);
else
return (int)($a%$b);
}

/*
* nthDayOfMonth($n,$dow,$month,$year) will compute the Nth day of the given
* month. For example, the first Monday in April 2001.
*
* Parameters:
* $n - the Nth day you want, i.e. 2 for 2nd
* $dow - The day of week you want, 0=Sunday, 1=Monday, etc. [0-6]
* $month - The month you want [1-12]
* $year - The full year [like 2001]
*
* Returns:
* The date, in the month you passed, that fits the criteria.
* or..
* -1 = invalid date
* -2 = There is no Nth day of that month, like no 5th Tuesday
* of the specified month
*/

function nthDayOfMonth($n,$dow,$month,$year) {

/* Check the date */
if ($month > 12)
return -1;
if ($dow > 6)
return -1;

/* Valid Nth day, should be no more than 5 */
if (($n <= 0) || ($n > 5))
return -1;

$retval = (7*$n)-6+phpdow_mod($dow-dayofweek(1,$month,$year),7);

/* Sanity check */
if (!checkdate($month,$retval,$year))
return -2;
return $retval;
}
?>
работа в Украине

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Скрипт работы с датой!!!
« Ответ #2 : 02 Сентября 2003, 20:17:04 »
только не забудь, что
Воскресенье - 0
Понедельник - 1...
работа в Украине

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #3 : 02 Сентября 2003, 21:00:25 »
ну и кривизна...
о существовании функции mktimr ни автор скрипта, ни доброхот, который его запостил, видимо, не догадываются...

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Скрипт работы с датой!!!
« Ответ #4 : 02 Сентября 2003, 22:29:51 »
Цитировать
RomikChef:
mktimr

Да Ромик! о функции mktimr мы вообще ничего не слышали!
Слушай, а почему ты мануал сам не пишешь

Alan
function third_saturday($month, $year)
{
$stamp = mktime (0, 0, 0, $month, 1, $year);
$third_saturday = mktime(0,0,0,9,(15+(6-date("w", $stamp))),$year);
$saturday = date("d", $third_saturday);
return $saturday;
}
echo third_saturday(10,2003);
?>[OFF]Благодаря Ромику, Юкко пробует стать на путь истинный, но он безнадежен, ничего у него не получится!!! как и у автора, того скрипта, который я привел вначале, теперь мы оба безнадежны![/OFF]
« Последнее редактирование: 02 Сентября 2003, 22:59:59 от Yukko »
работа в Украине

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #5 : 02 Сентября 2003, 22:54:54 »
чтобы не быть голословным

function third_friday($m,$y) {
  
$first_weekday=date("w",mktime(0,0,0,$m,1,$y));
  if (
$first_weekday==0$first_weekday=7;
  if (
$first_weekday>5$add=3*7; else $add=2*7;
  
$day=6+$add-$first_weekday;
  return 
mktime(0,0,0,$m,$day,$y);
}
for (
$i=0;$i<4;$i++) {
  
$m=date("n");
  
$y=date("Y");
  
$friday=third_friday($m+$i,$y);
  echo 
date("d.m.y",$friday),"(".ceil(($friday-time())/(60*60*24)).")
\\n"
;
}  


только тут нету проверки на то, что пятница уже прошла
« Последнее редактирование: 02 Сентября 2003, 23:01:07 от RomikChef »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #6 : 02 Сентября 2003, 22:56:42 »
а кто сказал, что я не пишу? ;-)

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Скрипт работы с датой!!!
« Ответ #7 : 02 Сентября 2003, 23:07:18 »
Цитировать
RomikChef:
а кто сказал, что я не пишу? ;-)

Да нет, я вообще-то ничего против не имею...
Цитировать
RomikChef:
ну и кривизна...

Просто после такой реакции вообще писать в форум не хочется. Я понимаю, что ты так привык, но все таки...
[OFF]Я привел самое быстрое решение, человек вообще не знал, как к задаче подойти. Благодаря нашей полемике у него есть выбор[/OFF]
работа в Украине

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #8 : 02 Сентября 2003, 23:10:15 »
может быть, оно и самое быстрое, но кто скажет, что оно не кривое - пусть первый бросит в меня камень.

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Скрипт работы с датой!!!
« Ответ #9 : 02 Сентября 2003, 23:23:22 »
Цитировать
RomikChef:
оно и самое быстрое,

я имел в виду не самое быстрое, а быстрее всего мной найденное :) признаю, что про функцию mktime сначала даже не подумал. Что поделать, у тебя многолетний опыт :)
работа в Украине

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #10 : 03 Сентября 2003, 10:35:20 »
[off]
Yukko
RomikChef
Флеймить заканчиваем [/off]
AS IS...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #11 : 03 Сентября 2003, 12:13:51 »
а никто (в данном случае)  и не флеймит.
разговор идет чисто технологический.
да и тот уже закончен

Оффлайн Alan

  • -{ Наблюдатель }-
  • Старожил
  • ****
  • Сообщений: 493
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.krivoyrog.info
Скрипт работы с датой!!!
« Ответ #12 : 03 Сентября 2003, 16:41:15 »
RomikChef
твой скрипт подходит, только он в некоторых случаях неверно вывводит резулльтат.
Например сегодня 3 сентября 2003. на сервере я ставлю 20 сентебря 2003 года и получаю следующее
--------------------------
19.09.03 [-1]
17.10.03 [27]
21.11.03 [62]
19.12.03 [90]
-----------------------------
Если можно подправб чтоб он выводил правильно. Плиз!
:: Тот кто поднялся выше, просто полез раньше ::
   

Оффлайн Bublic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Скрипт работы с датой!!!
« Ответ #13 : 03 Сентября 2003, 16:58:49 »
Вот чудак! Тябя же предупреждали, что "нету проверки на то, что пятница уже прошла".
Отрицательные значения в скобках как раз и говорят об этом.
Просто не выводи их - и все.

Оффлайн Alan

  • -{ Наблюдатель }-
  • Старожил
  • ****
  • Сообщений: 493
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.krivoyrog.info
Скрипт работы с датой!!!
« Ответ #14 : 03 Сентября 2003, 17:49:07 »
если б я знал как ....
:: Тот кто поднялся выше, просто полез раньше ::
   

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28