Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как в PHP выводить сообщение на сайте до 10:00

306
24 октября 2011 года
order.daemon
275 / / 11.05.2007
Решил порадовать пользователей блога и прикрутить сообщение, типа - Доброе утро!
Вот только не знаю как на php обратится к времени...
Подскажите плиз, буду очень благодарен за расширенных ответ, ну и вам +1
Страницы:
13
24 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Мануал рулит. http://ru.php.net/manual/en/ref.datetime.php
 
Код:
$d = getdate();
if($d['hours']<10) echo 'Message';
274
24 октября 2011 года
Lone Wolf
1.3K / / 26.11.2006
ПХП решение тут не подходит.
getdate, которое советуется выше возьмет серверное время, и я почему-то уверен, что в 99% случае6в серверное время будет отличатся от времени пользователя.
так что ЖС-вам в помощь
 
Код:
if(Date.getHours()<10)
    document.getElementById('message-block').innerHTML="Message";


ну или как вы там решите прятать, показывать сообщение
13
24 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Lone Wolf
ПХП решение тут не подходит.
getdate, которое советуется выше возьмет серверное время, и я почему-то уверен, что в 99% случае6в серверное время будет отличатся от времени пользователя.


Все зависит от задачи. К тому насчет 99% вы ошибаетесь. Если говорить о России, то большинство самых крупных городов живет по московскому времени.
Но самое важное - это какова именно задача. Если речь идет о чем-то критическом вроде разрешать авторизацию или регистрацию тольк в определенное время - тут ваш пример с JS не катит. В таком случае надо использовать GeoIP для определения временного пояса юзера

306
24 октября 2011 года
order.daemon
275 / / 11.05.2007
Вариант 1 - работает через раз
 
Код:
<script>
var ddate=new Date();
var hours=ddate.getHours();
if ((hours >= 8) && (hours < 22)) document.bgColor='#ffffff';
else document.bgColor='#000000';
</script>


Вариант 2 - работает, но не знаю на сколько точно

 
Код:
<script language="JavaScript">
var h=(new Date()).getHours();
if (h > 23 || h <7) document.write('Доброй ночи,');
if (h > 6 && h < 12) document.write('Доброе утро,');
if (h > 11 && h < 19) document.write('Добрый день,');
if (h > 18 && h < 24) document.write('Добрый вечер,');
</script>
306
24 октября 2011 года
order.daemon
275 / / 11.05.2007
<script language="JavaScript">
var h=(new Date()).getHours();
if (h > 23 || h <7) document.write('Доброй ночи,');
if (h > 6 && h < 12) document.write('Доброе утро,');
if (h > 11 && h < 19) document.write('Добрый день,');
if (h > 18 && h < 24) document.write('Добрый вечер,');
</script>

Но не получается вставить:
getElementById("hi").style.display="none";

 
Код:
<div id="hi" style="display:none">hi</div>
13
24 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Работает через потому что написано с ошибками. Обращение к свойствам стиля делается так: document.style.bgColor
Точность работы вы можете проверить самостоятельно меняя время на своем компьютере.

Ну и как обычно неверное у вас обращение к поиску объекта в DOM
 
Код:
document.getElementById("hi").style.display="none";
306
24 октября 2011 года
order.daemon
275 / / 11.05.2007
 
Код:
<script>
var ddate=new Date();
var hours=ddate.getHours();
if ((hours >= 10) && (hours < 22)) document.getElementById("hi").style.display="";
else document.getElementById("hi").style.display="none";
</script>
<div id="hi" style="display:none">hi</div>
274
24 октября 2011 года
Lone Wolf
1.3K / / 26.11.2006
а на то вы расчитывали? еcли исполнение скрипта, происходит раньше создания соответсующего елемента?
Код:
<body &#111;&#110;load="initMessage()">
<div id="hi" style="display:none">hi</div>
</body>
<script>
function initMessage() {
var ddate=new Date();
var hours=ddate.getHours();
if ((hours >= 10) && (hours < 22)) document.getElementById("hi").style.display="";
else document.getElementById("hi").style.display="none";
}
</script>
306
24 октября 2011 года
order.daemon
275 / / 11.05.2007
Исправил все тонкости, проверил, все работает. Всем большое спс за быструю реакцию.

В результате получили скрипт который в зависимости от времени пользователя показывает сообщение до 10 утра а потом его скрывает.

Цитата:

<body onload="initMessage()">
<div id="hi">hi</div>
</body>
<script>
function initMessage() {
var ddate=new Date();
var hours=ddate.getHours();
if ((hours >= 10) && (hours < 22)) document.getElementById("hi").style.display="none";
else document.getElementById("hi").style.display="";
}
</script>

13
24 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Последнюю строку следует заменить на
 
Код:
else document.getElementById("hi").style.display="block";
274
24 октября 2011 года
Lone Wolf
1.3K / / 26.11.2006
опередил =). только про display:block писать хотел
306
25 октября 2011 года
order.daemon
275 / / 11.05.2007
Спс, друзья ;)
45K
27 октября 2011 года
spelesto
7 / / 26.01.2009
Добрый день товарищи!

У меня наработка в теме:
Вот весь исходник: http://pastebin.com/ZqjAKDjA

Как его можно улучшить? Я к тому, как выводить человеческое время без указания явных часов и минут ифами???

Единственное что забыл добавить в исходник вначале кода, это вставку
 
Код:
date_default_timezone_set("Europe/Moscow");
13
27 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Вы предлагаете нам разбираться в этой дикой каше говнокода? В таком случае в раздел, где люди размещают предложения о работе. Думаю ваша задача стоит около тысячи рублей.
45K
27 октября 2011 года
spelesto
7 / / 26.01.2009
я не предлагаю предлагать мне предлагать работу вам я спросил лишь о том, как можно легче вывести время на человеческом языке
13
27 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Это ужасное, невероятное, запредельное говно, которые вы выложили, можно ужать до пары сотен строк. Мне вот одно интересно - сколько времени вы потратили на написание почти 3000 строк которые выводят время? 3000 строк где реально надо около 20. Я уж не говорю про орфографические ошибки, которым счет сотни.
271
27 октября 2011 года
MrXaK
721 / / 31.12.2002
не, ну если заменить условия на элементы массива и обращаться потом по ключу, то получится очень-таки кошерная высокоскоростная табличка)))
смотри тут
45K
27 октября 2011 года
spelesto
7 / / 26.01.2009
Цитата: RussianSpy
3000 строк где реально надо около 20. Я уж не говорю про орфографические ошибки, которым счет сотни.



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

45K
27 октября 2011 года
spelesto
7 / / 26.01.2009
Цитата: Mr.Hacker
не, ну если заменить условия на элементы массива и обращаться потом по ключу, то получится очень-таки кошерная высокоскоростная табличка)))
смотри тут



спасибо добрый человек!

45K
27 октября 2011 года
spelesto
7 / / 26.01.2009



нет, это не решает сабжа вопроса. это выводит дату, но не время на русском языке.

к примеру: Шестнадцать часов пятьдесят две минуты

274
27 октября 2011 года
Lone Wolf
1.3K / / 26.11.2006
Вот решение
с тебя 10 баксов
13
27 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: spelesto
начнем с того, что это не мой код. я его также успешно нашел в недрах интернета (!).
может поделитесь 20 строчным неговнокодом?



Лень мне писать полностью - подкину общую идею

 
Код:
$words1 = array('ноль', 'один', 'два', 'три', 'четыре', 'пять' /* и т.д. до двадцати трех*/);
$words2 = array('ноль', 'одна', 'две', 'три', 'четыре', 'пять' /* и т.д. до пятидесяти девяти*/);
$d = get_date();
echo 'Московское время '.$words1[$d['hours']].' часов '.$words2[$d['minutes']].' минут '.$words2[$d['seconds']].' секунд';


Еще надо вставить обработку в зависимости от числа выбор слова час/часа/часов. Делается элементарно. Для дат аналогично
45K
28 октября 2011 года
spelesto
7 / / 26.01.2009
Цитата: RussianSpy
Лень мне писать полностью - подкину общую идею



БОЛЬШОЕ СПАСИБО!

Вот что получилось, работает:

Код:
<?php

$words1 = array('ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'воесемнадцать', 'двадцать', 'двадцать один', 'двадцать два', 'двадцать три');

$words2 = array('ноль', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'воесемнадцать', 'двадцать', 'двадцать один', 'двадцать два', 'двадцать три', 'двадцать четыре', 'двадцать пять', 'двадцать шесть', 'двадцать семь', 'двадцать восемь', 'двадцать девять', 'тридцать', 'тридцать один', 'тридцать два', 'тридцать три', 'тридцать четыре', 'тридцать пять', 'тридцать шесть', 'тридцать семь', 'тридцать восемь', 'тридцать девять', 'сорок', 'сорок один', 'сорок два', 'сорок три', 'сорок четыре', 'сорок пять', 'сорок шесть', 'сорок семь', 'сорок восемь', 'сорок девять', 'пятьдесят', 'пятьдесят один', 'пятьдесят два', 'пятьдесят три', 'пятьдесят четыре', 'пятьдесят пять', 'пятьдесят шесть', 'пятьдесят семь', 'пятьдесят восемь', 'пятьдесят девять');

$d = getdate();

echo 'Московское время '.$words1[$d['hours']].' часов '.$words2[$d['minutes']].' минут '.$words2[$d['seconds']].' секунд';

?>
13
28 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
опять вы за свое
зачем нужно вбивать 'пятьдесят два', 'пятьдесят три', если достаточно вбить только десятки тридцать, сорок, пятьдесят
и часы у вас не склоняются
будет
Московское время: 2 часов 43 минут 21 секунд.
66K
28 октября 2011 года
onerror
45 / / 05.07.2011
Можно делать примерно так (я именно так и делаю :-)):

Код:
print Second2word::doit('23:12:01');

class Second2word {
   
    private static $def = array (
        'form' => array('1' => 0, '2' => 1, '3' => 1, '4' => 1),
        'rank' => array(
            'h' => array('час', 'часа', 'часов'),
            'm' => array('минута', 'минуты', 'минут'),
            's' => array('секунда', 'секунды', 'секунд'),
        ),
    );
       
    public static function doit($str) {
        $time = explode(':', $str);
        $time = array('h' => $time[0], 'm' => $time[1], 's' => $time[2]);
        $word = array();
       
        foreach($time as $key => $value) {
            $word[] = self::dvig($value, $key);
        }
       
        return implode(' ', $word);
    }
   
    private static function dvig($str, $key) {
        $def = self::$def;
        $form = $def['form'];
        $rank = $def['rank'][$key];
       
        $word = '';
        $str = (strlen($str) == 1) ? '0' . $str : $str;
        $dig = str_split($str);
        $dig = array_reverse($dig);
       
        if (1 == $dig[1]) $word = $rank[2];
        else {
            $key = (isset($form[$dig[0]])) ? $form[$dig[0]] : false;
            $word = ($key !== false) ? $rank[$key] : $rank[2];
        }
       
        return $str . ' ' . $word;
    }
   
}
13
28 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
1) Зачем тут ООП?
2) где остальное?
66K
29 октября 2011 года
onerror
45 / / 05.07.2011
1) Остальное меня не интересует.

2) ООП вот зачем: например, надо получить форму не для времени, а для произвольного слова - и я добавляю новую функцию - не get_time(), а просто get(), используя все остальные готовые алгоритмы:

http://ir2.ru/Digit_form.php (да, название скрипта лучше тогда поменять).

2а) в такой форме вопрос беспредметный: покажите код для данной функциональности без ООП, и мы сравним, что лучше.
278
29 октября 2011 года
Alexander92
1.1K / / 04.08.2008
Хотите без ООП - вот вам без ООП.
Код:
<?php
    function get_word_form($number, $qualifier) {
        if ( (($number % 10) == 0) || (($number % 10) >= 5) || (($number > 10) && ($number <= 19)) )
            return ($qualifier == 'h') ? 'часов' : (($qualifier == 'm') ? 'минут' : 'секунд');
        if (($number % 10) == 1)
            return ($qualifier == 'h') ? 'час' : (($qualifier == 'm') ? 'минута' : 'секунда');
        else
            return ($qualifier == 'h') ? 'часа' : (($qualifier == 'm') ? 'минуты' : 'секунды');
    }

    $words_h = array(
            0 =>  'ноль',
            1 =>  'один',
            2 =>  'два',
            3 =>  'три',
            4 =>  'четыре',
            5 =>  'пять',
            6 =>  'шесть',
            7 =>  'семь',
            8 =>  'восемь',
            9 =>  'девять',
            10 => 'десять',
            11 => 'одиннадцать',
            12 => 'двенадцать',
            13 => 'тринадцать',
            14 => 'четырнадцать',
            15 => 'пятнадцать',
            16 => 'шестнадцать',
            17 => 'семнадцать',
            18 => 'восемнадцать',
            19 => 'девятнадцать',
            20 => 'двадцать',
            30 => 'тридцать',
            40 => 'сорок',
            50 => 'пятьдесят'
    );

    $words_m = $words_h;
    $words_m[1] = 'одна';  // учесть различие: "один час", но "одна минута"
    $words_m[2] = 'две';   // учесть различие: "два час", но "две минуты"

    $words_s = $words_m;

    /* ============================================================================= */

    $time_str = '01:15:32';

    list($hour, $minute, $second) = array_map('intval', explode(':', $time_str));
    $time_words = sprintf('%s%s %s %s%s %s %s%s %s',
                ($hour <= 20) ? $words_h[$hour].' ' : $words_h[$hour - $hour % 10].' ',
                ($hour <= 20) ? '' : $words_h[$hour % 10],
                get_word_form($hour, 'h'),
                ($minute <= 20) ? $words_m[$minute].' ' : $words_m[$minute - $minute % 10].' ',
                ($minute <= 20) ? '' : $words_m[$minute % 10],
                get_word_form($minute, 'm'),
                ($second <= 20) ? $words_s[$second].' ' : $words_s[$second - $second % 10].' ',
                ($second <= 20) ? '' : $words_s[$second % 10],
                get_word_form($second, 's')
    );
    echo $time_str.'<br/>'.$time_words;
   
?>
12
29 октября 2011 года
alekciy
3.0K / / 13.12.2005
Ёжики плакали, кололись, но продолжали генерировать гавнокод начисто игнорируя gettext с его plural forms.
13
29 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: onerror
Остальное меня не интересует.


Ну вас оно может и не интересует, но приведенный вами код не делает ничего из того что интересно ТСу. Его интересует вывод времени словами. У вас же результатом будет к примеру "12 часов 11 минут 53 секунды"

Цитата: onerror
покажите код для данной функциональности без ООП, и мы сравним, что лучше.


ООП ради самого ООП - это быдлокод. В данном случае использование всего этого стуктурного говна ничем не оправдано. Но зато жрет больше памяти и выполняться будет медленнее. Не стоит бездумно следовать моде - стоит иногда пользоваться мозгом и задать себе вопрос - какое решение наиболее адекватно для данной конкретной задачи.
Учитывая уровень знаний ТСа приведенный вами код ему непонятен абсолютно. Поэтому для данной конкретной задачи (показать новичку как выводить дату и время словами) приведенный вами код не подходит.

278
29 октября 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: alekciy
Ёжики плакали, кололись, но продолжали генерировать гавнокод начисто игнорируя gettext с его plural forms.


Намекаете, что ТСу это будет понятнее? :) Сомневаюсь...

13
29 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Alexander92
Намекаете, что ТСу это будет понятнее? :) Сомневаюсь...



Ваш код вполне неплох. Хотя я конечно не стал бы делать через sprintf (насколько я помню для высоких нагрузок он не очень хорош), но это дело вкуса. ТСу действительно это менее понятно, чем через if else. НО! Я думаю, что в данном случае ТС и не будет разбираться как оно работает, а применит обычный копипаст ;)

12
29 октября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Alexander92
Намекаете, что ТСу это будет понятнее? :) Сомневаюсь...


С ТС-ом и так все понятно. Но как знать... в любом случае это повод задуматься не только ему.

66K
30 октября 2011 года
onerror
45 / / 05.07.2011
Цитата: Alexander92
Хотите без ООП - вот вам без ООП.



Моим кодом можно пользоваться так:

include 'Digit_form.php';
print Digit_form::get_time('12:13:14');

Как пользоваться вашим?

278
30 октября 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: onerror
Моим кодом можно пользоваться так:

include 'Digit_form.php';
print Digit_form::get_time('12:13:14');

Как пользоваться вашим?


Вам лень даже готовый код переделать? Ладно, поработаю за вас. Мне не сложно.

Код:
<?php
    /* Time2Words.inc.php */

    $words_h = array(
           0 =>  'ноль',
           1 =>  'один',
           2 =>  'два',
           3 =>  'три',
           4 =>  'четыре',
           5 =>  'пять',
           6 =>  'шесть',
           7 =>  'семь',
           8 =>  'восемь',
           9 =>  'девять',
           10 => 'десять',
           11 => 'одиннадцать',
           12 => 'двенадцать',
           13 => 'тринадцать',
           14 => 'четырнадцать',
           15 => 'пятнадцать',
           16 => 'шестнадцать',
           17 => 'семнадцать',
           18 => 'восемнадцать',
           19 => 'девятнадцать',
           20 => 'двадцать',
           30 => 'тридцать',
           40 => 'сорок',
           50 => 'пятьдесят'
    );

    $words_m = $words_h;
    $words_m[1] = 'одна';  // учесть различие: "один час", но "одна минута"
    $words_m[2] = 'две';   // учесть различие: "два час", но "две минуты"

    $words_s = $words_m;

    function get_word_form($number, $qualifier) {
        if ( (($number % 10) == 0) || (($number % 10) >= 5) || (($number > 10) && ($number <= 19)) )
            return ($qualifier == 'h') ? 'часов' : (($qualifier == 'm') ? 'минут' : 'секунд');
        if (($number % 10) == 1)
            return ($qualifier == 'h') ? 'час' : (($qualifier == 'm') ? 'минута' : 'секунда');
        else
            return ($qualifier == 'h') ? 'часа' : (($qualifier == 'm') ? 'минуты' : 'секунды');
    }

    function make_time_words($time_str) {
        list($hour, $minute, $second) = array_map('intval', explode(':', $time_str));
        return sprintf('%s%s %s %s%s %s %s%s %s',
                ($hour <= 20) ? $words_h[$hour].' ' : $words_h[$hour - $hour % 10].' ',
                ($hour <= 20) ? '' : $words_h[$hour % 10],
                get_word_form($hour, 'h'),
                ($minute <= 20) ? $words_m[$minute].' ' : $words_m[$minute - $minute % 10].' ',
                ($minute <= 20) ? '' : $words_m[$minute % 10],
                get_word_form($minute, 'm'),
                ($second <= 20) ? $words_s[$second].' ' : $words_s[$second - $second % 10].' ',
                ($second <= 20) ? '' : $words_s[$second % 10],
                get_word_form($second, 's')
        );
    }

?>

Использование:
 
Код:
<?php
    include 'Time2Words.inc.php';
    echo make_time_words('11:03:54');
?>
66K
31 октября 2011 года
onerror
45 / / 05.07.2011
Цитата: RussianSpy
Его интересует вывод времени словами



Ах, вот вы про что. Так бы сразу и говорили (а то "остальное" - понятие растяжимое, и в этой теме задавали разные вопросы). Это тоже достаточно просто реализовать с помощью ООП: http://ir2.ru/Propis.php

А вашего процедурного варианта (самого лучшего из всех предложенных, с абсолютно понятным для новичка кодом) мы так, видимо, и не дождёмся?

66K
31 октября 2011 года
onerror
45 / / 05.07.2011
Цитата: Alexander92
Ладно, поработаю за вас



ладно, поработайте, я не против :-). Только счёта не выставляйте.

А что вы будете делать, если завтра понадобится вывести рубли или метры вместо минут и секунд? Я вот за вас уже подумал об этом и сделал: http://ir2.ru/Propis.php

Можете за меня "в своём стиле" сделать лучше?

13
31 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: onerror
А что вы будете делать, если завтра понадобится вывести рубли или метры вместо минут и секунд?


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

74K
31 октября 2011 года
418ImATeapot
11 / / 31.10.2011
http://www.php.su/functions/?cat=datetime

Гугл - мощная штука.
13
31 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: 418ImATeapot
http://www.php.su/functions/?cat=datetime

Гугл - мощная штука.


Вы бы сначала почитали ветку о чем речь идет, а потом ссылки бесполезные давали

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог