Отдаю на критику следующий код - как-то получилось много и странно... А может, кому-нибудь пригодится)



открывается изображение, на него накладывается текст , считается время до Нового Года и тоже кидается на изображение.

код

скачать архивчик с картинкой, кодом и шрифтом

@темы: PHP, Интересности

Комментарии
19.12.2007 в 22:34

p.s. функция function win2uni($s) лишняя , ибо о прелестях imagettftext($im,12,0,20,19,12700,"arial.ttf",$text1); узнал после n-ого количества пассов.

$diff = mktime(23,59,59,$m,$d,$y)-mktime($hh,$mm,$ss,$mn,$dn,$yn); - возращает разницу между текущим моментом и почти полночью 31 декабря текущего года .
19.12.2007 в 22:44

Never Say Never (c)
хех.. молодца, что запостил что-то новое в сообщество, а то оно как бы почти умерло)
вот только почему так много кода, когда можно его уменьшить раза в 2 точно.

во первых
$mn = date("m");
$dn = date("d");
$yn = date("y");
$hh = date("H");
$mm = date("i");
$ss = date("s");
$diff = mktime(23,59,59,$m,$d,$y)-mktime($hh,$mm,$ss,$mn,$dn,$yn);

на
$diff = mktime(23,59,59,$m,$d,$y)-time();

во вторых, преобразование окончаний можно было вынести в одну функцию

в третьих, GetDate() вообще легче вырезать и вместо (23,59,59,$m,$d,$y) поставить (23,59,59,12,31,date("Y"))
Ну или хотя бы не
$m = $this->month;
$d = $this->day;
$y = $this->year;
...
...mktime(23,59,59,$m,$d,$y)...

а
...mktime(23,59,59,$this->month,$this->day,$this->year)....
И вообще, память жалеть надо)

Но это мелочи)

P.S. Всех с наступающим новым годом)
19.12.2007 в 22:49

перепишу)
чтобы получилось мало и компактно. узнать бы ещё, почему ошибка на час... и что с информером наверху сообщества - что-то не верится, что до НГ так мало осталось..)
19.12.2007 в 22:52

ошибка на час у меня на ноутбуке походу)
19.12.2007 в 23:09

 
та-а... у меня то же самое заняло 26 строк, не считая пустых строк и комментариев %)
а зачем было пихать это в отдельный класс? O.O

да, и еще... вот утилита для подсветки php-кода, написанная как раз для @дневников - она, кстати, сохраняет отступы слева. (А то в посте все слилось в одну сосиску, тяжело читать >.< )
19.12.2007 в 23:11

 
да, и еще =))

$diff = mktime(23,59,59,$m,$d,$y)-time();
мы же считаем до Нового Года? :)
<?php   $diff mktime(00011+ (int) date('Y')) - time();   ?>

19.12.2007 в 23:16

а зачем было пихать это в отдельный класс? O.O

долгая история, срочно делали эту бойду для заказчика - внедрили в CMS ку , она там просто класс вызывать будет.

а какие-нить мысли насчет вычисления оставшихся дней - часов - минут есть? вместо
$days = $diff/60/60/24;
$hours = $diff/60/60 - intval($days)*24;
$minutes = $diff/60 - intval(intval($days*24)*60);
$seconds = $diff - intval(intval(intval($days*24*60))*60); ...
19.12.2007 в 23:19

 
а какие-нить мысли насчет вычисления оставшихся дней - часов - минут есть? вместо
мне проще всего было бы вот так =)

<?php
function writetext($image, $size, $angle, $x, $y, $color, $font, $text)
{
imagettftext($image, $size, $angle, $x, $y, $color, $font, mb_convert_encoding($text, "UTF-8", "CP-1251"));
}

function
wform($count, $single, $partitive, $plural)
{
return
in_array($count,
array(
1, 21, 31, 41, 51)) ? $single : (
in_array
($count, array(2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54)) ? $partitive : $plural);
}

writetext($img, 9, 0, 1, 148, $black, "arial.ttf",
sprintf("%d %s %d %s %d %s %d %s",
floor($diff / 86400),
wform(floor($diff / 86400), "день", "дня", "дней"),
floor(($diff % 86400) / 3600),
wform(floor(($diff % 86400) / 3600), "час", "часа", "часов"),
floor(($diff % 3600) / 60),
wform(floor(($diff % 3600) / 60), "минута", "минуты", "минут"),
floor($diff % 60),
wform(floor($diff % 60), "секунда", "секунды", "секунд")
)
);
?>

20.12.2007 в 00:30


L.P.M. , Nuclear Snow
здорово, спасиб)
04.01.2008 в 14:17

A kid from The Ural's
А если не до Нового Года считаем, а до какой-то своей даты? Что нужно изменить в скрипте?
04.01.2008 в 17:16

Kevin McLean
А если не до Нового Года считаем, а до какой-то своей даты? Что нужно изменить в скрипте?


<?php $diff = mktime(0, 0, 0, 1, 1, 1 + (int) date('Y')) - time(); ?> - высчитывается разница между текущей датой и датой mktime(0, 0, 0, 1, 1, 1 + (int) date('Y')) . mktime возвращает значение в числовом виде для любой даты, вот мануал:

параметры

пример
04.01.2008 в 17:23

Never Say Never (c)
[php] ты жесток. можн оже на русском.
ru2.php.net/manual/ru/function.mktime.php
04.01.2008 в 17:32

Nuclear Snow
ты жесток. можн оже на русском.
так матёрее)

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail