Как в PHP выводить сообщение на сайте до 10:00
Вот только не знаю как на php обратится к времени...
Подскажите плиз, буду очень благодарен за расширенных ответ, ну и вам +1
getdate, которое советуется выше возьмет серверное время, и я почему-то уверен, что в 99% случае6в серверное время будет отличатся от времени пользователя.
так что ЖС-вам в помощь
document.getElementById('message-block').innerHTML="Message";
ну или как вы там решите прятать, показывать сообщение
getdate, которое советуется выше возьмет серверное время, и я почему-то уверен, что в 99% случае6в серверное время будет отличатся от времени пользователя.
Все зависит от задачи. К тому насчет 99% вы ошибаетесь. Если говорить о России, то большинство самых крупных городов живет по московскому времени.
Но самое важное - это какова именно задача. Если речь идет о чем-то критическом вроде разрешать авторизацию или регистрацию тольк в определенное время - тут ваш пример с JS не катит. В таком случае надо использовать GeoIP для определения временного пояса юзера
var ddate=new Date();
var hours=ddate.getHours();
if ((hours >= 8) && (hours < 22)) document.bgColor='#ffffff';
else document.bgColor='#000000';
</script>
Вариант 2 - работает, но не знаю на сколько точно
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>
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";
Точность работы вы можете проверить самостоятельно меняя время на своем компьютере.
Ну и как обычно неверное у вас обращение к поиску объекта в DOM
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>
<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>
В результате получили скрипт который в зависимости от времени пользователя показывает сообщение до 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>
У меня наработка в теме:
Вот весь исходник: http://pastebin.com/ZqjAKDjA
Как его можно улучшить? Я к тому, как выводить человеческое время без указания явных часов и минут ифами???
Единственное что забыл добавить в исходник вначале кода, это вставку
начнем с того, что это не мой код. я его также успешно нашел в недрах интернета (!).
может поделитесь 20 строчным неговнокодом?
смотри тут
спасибо добрый человек!
нет, это не решает сабжа вопроса. это выводит дату, но не время на русском языке.
к примеру: Шестнадцать часов пятьдесят две минуты
с тебя 10 баксов
может поделитесь 20 строчным неговнокодом?
Лень мне писать полностью - подкину общую идею
$words2 = array('ноль', 'одна', 'две', 'три', 'четыре', 'пять' /* и т.д. до пятидесяти девяти*/);
$d = get_date();
echo 'Московское время '.$words1[$d['hours']].' часов '.$words2[$d['minutes']].' минут '.$words2[$d['seconds']].' секунд';
Еще надо вставить обработку в зависимости от числа выбор слова час/часа/часов. Делается элементарно. Для дат аналогично
БОЛЬШОЕ СПАСИБО!
Вот что получилось, работает:
$words1 = array('ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'воесемнадцать', 'двадцать', 'двадцать один', 'двадцать два', 'двадцать три');
$words2 = array('ноль', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'воесемнадцать', 'двадцать', 'двадцать один', 'двадцать два', 'двадцать три', 'двадцать четыре', 'двадцать пять', 'двадцать шесть', 'двадцать семь', 'двадцать восемь', 'двадцать девять', 'тридцать', 'тридцать один', 'тридцать два', 'тридцать три', 'тридцать четыре', 'тридцать пять', 'тридцать шесть', 'тридцать семь', 'тридцать восемь', 'тридцать девять', 'сорок', 'сорок один', 'сорок два', 'сорок три', 'сорок четыре', 'сорок пять', 'сорок шесть', 'сорок семь', 'сорок восемь', 'сорок девять', 'пятьдесят', 'пятьдесят один', 'пятьдесят два', 'пятьдесят три', 'пятьдесят четыре', 'пятьдесят пять', 'пятьдесят шесть', 'пятьдесят семь', 'пятьдесят восемь', 'пятьдесят девять');
$d = getdate();
echo 'Московское время '.$words1[$d['hours']].' часов '.$words2[$d['minutes']].' минут '.$words2[$d['seconds']].' секунд';
?>
зачем нужно вбивать 'пятьдесят два', 'пятьдесят три', если достаточно вбить только десятки тридцать, сорок, пятьдесят
и часы у вас не склоняются
будет
Московское время: 2 часов 43 минут 21 секунд.
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;
}
}
2) где остальное?
2) ООП вот зачем: например, надо получить форму не для времени, а для произвольного слова - и я добавляю новую функцию - не get_time(), а просто get(), используя все остальные готовые алгоритмы:
http://ir2.ru/Digit_form.php (да, название скрипта лучше тогда поменять).
2а) в такой форме вопрос беспредметный: покажите код для данной функциональности без ООП, и мы сравним, что лучше.
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 часов 11 минут 53 секунды"
ООП ради самого ООП - это быдлокод. В данном случае использование всего этого стуктурного говна ничем не оправдано. Но зато жрет больше памяти и выполняться будет медленнее. Не стоит бездумно следовать моде - стоит иногда пользоваться мозгом и задать себе вопрос - какое решение наиболее адекватно для данной конкретной задачи.
Учитывая уровень знаний ТСа приведенный вами код ему непонятен абсолютно. Поэтому для данной конкретной задачи (показать новичку как выводить дату и время словами) приведенный вами код не подходит.
Намекаете, что ТСу это будет понятнее? :) Сомневаюсь...
Ваш код вполне неплох. Хотя я конечно не стал бы делать через sprintf (насколько я помню для высоких нагрузок он не очень хорош), но это дело вкуса. ТСу действительно это менее понятно, чем через if else. НО! Я думаю, что в данном случае ТС и не будет разбираться как оно работает, а применит обычный копипаст ;)
С ТС-ом и так все понятно. Но как знать... в любом случае это повод задуматься не только ему.
Моим кодом можно пользоваться так:
include 'Digit_form.php';
print Digit_form::get_time('12:13:14');
Как пользоваться вашим?
include 'Digit_form.php';
print Digit_form::get_time('12:13:14');
Как пользоваться вашим?
Вам лень даже готовый код переделать? Ладно, поработаю за вас. Мне не сложно.
/* 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')
);
}
?>
Использование:
include 'Time2Words.inc.php';
echo make_time_words('11:03:54');
?>
Ах, вот вы про что. Так бы сразу и говорили (а то "остальное" - понятие растяжимое, и в этой теме задавали разные вопросы). Это тоже достаточно просто реализовать с помощью ООП: http://ir2.ru/Propis.php
А вашего процедурного варианта (самого лучшего из всех предложенных, с абсолютно понятным для новичка кодом) мы так, видимо, и не дождёмся?
ладно, поработайте, я не против :-). Только счёта не выставляйте.
А что вы будете делать, если завтра понадобится вывести рубли или метры вместо минут и секунд? Я вот за вас уже подумал об этом и сделал: http://ir2.ru/Propis.php
Можете за меня "в своём стиле" сделать лучше?
Спасибо, о великий гуру. Как же я без вас жил все эти годы, но теперь мы все спасены
Вы бы сначала почитали ветку о чем речь идет, а потом ссылки бесполезные давали