За последние 24 часа нас посетили 112525 программистов и 4949 роботов. Сейчас ищут 1313 программистов ...

Код вывода даты "отстает"

Тема в разделе "PHP для новичков", создана пользователем jurvrn.ru, 3 сен 2019.

  1. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
  2. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @Artur_hopf, я ж предупредил чтобы не смеялись, это не сайт, это набросок, черновик. Собираю элементы, продумываю структуру... Сайт сугубо информационный. Держу на хостинге чтобы отрабатывать его в реальных условиях.
    PS как добавить 0 к первой цифре дня?
    --- Добавлено ---
    @Valick, пусть идут куда хотят, так как ответ постом выше, если и будет сайт в итоге, то он будет чисто локальным для города. Сайт не для людей, а именно для сообщества юристов - вот его смысл, в некоторой степени клуб.
     
  3. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    jurvrn.ru нравится это.
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    Еще 10 раз спроси, если лень перечитать тему.
    --- Добавлено ---
    @Artur_hopf, улыбку с лица сотри, а то люди не верят, что ты не шутишь. Или все же шутишь? :)
     
  5. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @miketomlin там даже голосовалка работает, не плохо =)
     
    jurvrn.ru нравится это.
  6. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    ещё 10 раз напишите чтобы я прочитал ) ведь сказал, что читаю, но много информации не может сразу усвоиться....только сейчас понял при чем здесь ваша "J", когда уяснил что "d" это 2 цифры.

    спасибо, но это wordpress, то есть не моя заслуга. Но есть ещё мега проект - сделать календарь событий для каждого пользователя. Такого плагина нет ещё вроде. Пока его не сделаю сайту придавать законченный вид не буду. Ещё регистрация в кастомной форме со второго раза срабатывает без каптчи... в общем проблем ещё много. У меня не хватает времени чтобы изучать программирование на профессиональном уровне, учусь на своих ошибках и по советам формчан

    если учесть что у меня код такой для дня
    $a=getdate();
    return $a['mday']​

    то для двух цифр l он будет выглядеть так? -
    $a=getdate('d');
    return $a['mday']​

    или
    $a=getdate('d');
    return $a['d']
    не работает ни так, ни так. Что понятно из мануала php - в массиве есть только mday, выводящая одну цифру
    у вас названия месяцев по русски будет?
     
    #31 jurvrn.ru, 4 сен 2019
    Последнее редактирование: 4 сен 2019
  7. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    jurvrn.ru нравится это.
  8. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @jurvrn.ru и еще от себя добавлю, читай внимательно и запоминай. Ты создаешь свой сайт на wordpress. И сюдя по твоим вопросам ты вообще не понимаешь что это такое. Wordpressтакой каркас для блогерш и блогеров, они обычно ничерта не смыслят в программировании. И вот в нем предусмотрены плагины и на сегодняшний день на любой чих предусмотрен плагин.

    И у wordpressa так же есть куча своих функции, и на дату в том числе:
    https://wp-kama.ru/function/the_date

    PHP:
    1. return the_date('j F Y в H:i');// получают дату или время записи, комментария или чего-то еще
    2. return date_i18n( 'j F Y H:m:s', false ); //получим текущую дату и время  
    https://wp-kama.ru/function/date_i18n
     
    #33 Artur_hopf, 4 сен 2019
    Последнее редактирование: 4 сен 2019
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    Я помню. Вы не думайте, что я злой. Я просто интонацию меняю, когда хочу намекнуть, что нужно ускорить усвоение ;)

    Нет у getdate такого. Я вам показывал ее параметр $timestamp (по названию можно догадаться, что к управлению форматированием он не имеет отношения). Опять-таки вбиваете «php getdate» и по ссылке на php.net см. описание параметров и т.п. Уже отвечая на ваш вопрос, я сказал, что лучше взять код Sail'а.

    Хотя бы по кривому названию массива $monthes можно было понять, что предполагается использование вашего массива. Автор просто устранил ошибку в вашем коде, на которую я указывал ранее. Массив мог не указать, чтобы сконцентрировать ваше внимание непосредственно на решении. Повторяю, этот раздел для новичков, а не для «нулевичков». Ответы пользователей предполагают наличие у спрашивающих какой-либо нач. подготовки по программированию/пыху. Поэтому не удивляйтесь, когда вас пинают из-за отсутствия таковой.
     
    jurvrn.ru нравится это.
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    P.S. Значение return в скобки брать не нужно. Это даже не include/require, у кот. значение часто заключают в скобки. Вы притащили на форум УГ.
     
  11. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @Sail, @Artur_hopf, @miketomlin, отчитываюсь об изучении )
    сделал так 2-мя вариантами
    PHP:
    1. date_default_timezone_set('Europe/Moscow');
    2. $ts = time();
    3. $months=array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
    4. return date('d', $ts).' '.$months[(date('n', $ts))].date(' Y', $ts);
    и
    PHP:
    1. date_default_timezone_set('Europe/Moscow');
    2. setlocale(LC_ALL, 'ru_RU.UTF-8');
    3. $den = date('d');
    4. $mes = mb_strtolower(strftime("%B"));
    5. $god = date('Y');
    6. return $den . ' ' . $mes . ' ' . $god;
    выберу первый, так как там окончания месяцев правильными получаются, так как берутся из массива. Правильный выбор?
    --- Добавлено ---
    P.S.
    но я использую именно ваш код и второй бы раз использовал, но нужен массив слов....
    всё что вывидите на сайте моя работа (тему передала на 30%, виждеты и шоркоды всё вручную написаны, плагинов много но почти ни один не вписывается в концепцию моего сайта, да и функциональны только платные плагины... поэтому 50% моего сайта написаны мной вручную
    честно говоря не понял в чем была ошибка - вы писали про j, но изначально там была d.... Но это уже не важно, все работает
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    Вроде норм.
    --- Добавлено ---
    Возможная рассинхронизация.
     
    jurvrn.ru нравится это.
  13. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    #38 Artur_hopf, 4 сен 2019
    Последнее редактирование: 4 сен 2019
    jurvrn.ru нравится это.
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    Я прежде там процитировал, к чему относилось мое замечание про 'j' ;) Потом еще пояснял. Автор походу был не в курсе про 'j', поэтому использовал приведение к int для получения нат. номера дня. Вам же, как выяснилось, нат. номер не нужен.
     
    jurvrn.ru нравится это.
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    Только все же обычно date_default_timezone_set не вызывают настолько локально. Что помешало внести исправления непосредственно в конфиг? Или хотя бы нужно сосредотачивать все ф-ции/весь код, где вызывается date_default_timezone_set, в одном месте, если не можете ограничиться однократным вызовом этой ф-ции (или многократным с постоянным параметром, т.е. константой).
     
    #40 miketomlin, 4 сен 2019
    Последнее редактирование: 4 сен 2019
  16. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    что локально вызывать не совсем правильно понимаю, тем более что у меня эта функция есть в другом уже шорткоде... В кофиг не хочу потому что при обновлении wordpress файл заменится, настройка слетит... Но есть идея - возможно помещу эту функцию в function.php. Спасибо за наводку.
    --- Добавлено ---
    отличная идея! код сократиться до одной строки! Только вот если нужно будет стиль придать отдельно дню , месяцу, году то как? через <span> ?
     
  17. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    P.S.
    @miketomlin, @Artur_hopf с функцией return date_i18n (жаль только что часы не идут) нет смысла использовать date_default_timezone_set('Europe/Moscow');
    видимо это внутрення функция wordpress и через настройки указывается правильный часовой пояс.
    Но у меня есть ещё "идущие" часы на java для них нужна установка временной зоны. И на них перемещение в function.php не подействовало. Хотя этот файл подключается одним из первых в системе wordpress.
     
  18. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @jurvrn.ru
    PHP:
    1. add_action('wp_ajax_ajax_date', 'ajax_date');
    2. add_action('wp_ajax_nopriv_ajax_date', 'ajax_date');
    3.  
    4. function ajax_date ()
    5. {
    6.     $date = date_i18n( 'j F Y H:m:s', false );
    7.     echo $date;
    8.     die();
    9. }
    10.  
    11. add_shortcode( 'updateDate', function () {
    12.     $date = date_i18n( 'j F Y H:m:s', false );
    13.     $result = "<span class='date'>{$date}<span><script>
    14.    setInterval(function() {
    15.    jQuery.get( '/wp-admin/admin-ajax.php?action=ajax_date', function( data ) {
    16.        jQuery('span.date').html(data);
    17.     });
    18.     }, 1000);
    19.    </script>";
    20.     return $result;
    21.  
    22. });
    и просто добавь шорткод [updateDate]
     
    jurvrn.ru нравится это.
  19. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @Artur_hopf, спасибо! просто для интереса - а что не так в моем коде идущих часов? как пишет @miketomlin это г/код? )
    мне нужно было время с сервера, нашел такой код в интернете
    PHP:
    1. $time = getdate();
    2. return '
    3. <form name='lcs'><p><i class='fa fa-clock-o fa-lg' aria-hidden='true'></i>&nbsp;&nbsp;<strong>Точное время: </strong><input type='text' class='polein' name='lcs2'></p></form>
    4.        <script>
    5.            var second={$time['seconds']};
    6.            var minute={$time['minutes']};
    7.            var hour={$time['hours']};
    8.            document.lcs.lcs2.value='0';
    9.                function display(){
    10.                    second++;
    11.                    if (second>=60){ second=0; minute++ }
    12.                    if (minute>=60){ minute=0; hour++ }
    13.                    if (hour>23){ hour=0; minute=0; second=0 }
    14.                    var cHour = hour;
    15.                    var cMinute = minute;
    16.                    var cSecond = second;
    17.                    if (second < 10) cSecond = '0' + second;
    18.                    if (minute < 10) cMinute = '0' + minute;
    19.                    if (hour < 10) cHour = '0' + hour;
    20.                    document.lcs.lcs2.value=cHour+':'+cMinute+':'+cSecond;
    21.                    setTimeout('display()',1000)
    22.                }
    23.            display()
    24.        </script>
    25. '
    а часы на PHP отстают.... посмотрите виджеты на сайте jurvrn.ru
     
    #44 jurvrn.ru, 4 сен 2019
    Последнее редактирование: 4 сен 2019
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.725
    @Artur_hopf, убьёшь девушке хостинг нафиг. Ты издеваешься, каждую секунду WordPress запрашивать ajax-ом? По опыту, это плохо кончается, особенно на дешёвых хостингах, а я почему-то думаю, что не VPS у девушки

    @jurvrn.ru, плохо, что большой кусок HTML вы ретурном даёте. Насколько вы изучили кодекс WordPress?
     
  21. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @mkramer, в моем коде вроде как время берется с сервера, а потом отсчитывается скриптом и не нагружает сервер. Значит продолжу свой использовать. Все равно в коде уважаемого @Artur_hopf идут только секунды....И я не девушка )

    а куда засунуть код return ? в переменную? или правильнее вынести большой кусок html за пределы php ? (здесь кстати на форуме была эта тема поднята, так что правильнее второй вариант?)
     
  22. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.725
    Прошу прощение, вот это прочитал, поэтому так решил
     
    jurvrn.ru нравится это.
  23. vvas

    vvas Новичок

    С нами с:
    9 апр 2018
    Сообщения:
    50
    Симпатии:
    10
  24. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @mkramer кстати подскажи как лучше данные с сервера обновлять. У меня на одном проекте серверное время нужно было, я таким макаром обновлял. Правда раз в минуту, ну всеже там кроме времени было еще куча данных.
    Вот серверный кусок которые запрашивается:
    PHP:
    1. public function realTimeUpdate($tpa){
    2.         ModelAlltpa::updateAllActualProduct();
    3.         ModelAlltpa::pushAllDowntime();
    4.         $lastSaveUser = ModelAuthorization::lastSaveUser();
    5.         $namePF = ModelView1::namePressForm($tpa);
    6.         $getTerminal1C = ModelGet1C::getTerminal1C($tpa);
    7.         $statusTPA = ModelView1::statusTPA($tpa, $getTerminal1C);
    8.         $rfid = ModelView1::getRFID($tpa);
    9.         $logMessage = ModelView1::logMessage($tpa, $namePF, $statusTPA);
    10.         $colorWeight = ModelOperator::colorWeight($tpa);
    11.         $colorDowntime = ModelAdjuster::colorDowntime($tpa);
    12.         $oidButton = ModelConnection::oidButton($tpa);
    13.         if($getTerminal1C !== false){
    14.             $prod = $getTerminal1C[0][0]['Product'];
    15.             $planData = $getTerminal1C[1];
    16.             $plan = $getTerminal1C[0][0]['ProductPlan'];
    17.             $cycle1C = $getTerminal1C[0][0]['ProductCycle'];
    18.             $weight1C = $getTerminal1C[0][0]['ProductWeight'];
    19.             $shift = $getTerminal1C[0][0]['Shift'];
    20.         }else{
    21.             $prod = null;
    22.             $planData = null;
    23.             $plan = null;
    24.             $cycle1C = null;
    25.             $weight1C = null;
    26.             $shift = null;
    27.         }
    28.         $result = (object)[
    29.             'date' => date('d.m.Y H:i:s'),
    30.             'rfid' => $rfid,
    31.             'diff' => ModelGraph::createDifference($tpa),
    32.             'prod' => $prod,
    33.             'planData' => $planData,
    34.             'plan' => $plan,
    35.             'endPlan' => $endPlan = ModelGraph::endPlan($rfid, $getTerminal1C, 0),
    36.             'cycle1C' => $cycle1C,
    37.             'cycle' => ModelView1::getDuration($tpa),
    38.             'weight1C' => $weight1C,
    39.             'weight' => ModelView1::middleWeight($tpa),
    40.             'shift' => $shift,
    41.             'colorTPA' => $statusTPA,
    42.             'log' => $logMessage,
    43.             'colorWeight' => $colorWeight,
    44.             'colorDowntime' => $colorDowntime,
    45.             'oidButton' => $oidButton,
    46.             'user' => $lastSaveUser
    47.         ];
    48.         return $result;
    49.     }
    А вот клиентский:
    Код (Javascript):
    1.  function update(){
    2.         var random = Math.round(Math.random() * (40000 - 20000) + 20000);
    3.         getAjax('index.php?r=post/real-time-update&tpa='+tpa, function(data){
    4.             var json = JSON.parse(data);
    5.         });
    6.         setTimeout(function() {
    7.             update();
    8.         }, random);
    9. }
    10. update()
     
  25. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @Artur_hopf, вот мой код шорткода полностью, работает, но отстает на 3-4 секунды (в вашем идут только секунды)

    PHP:
    1. add_shortcode ( 'my_shortcode_liveclockserver', 'my_shortcode_liveclockserver_func' );
    2. function my_shortcode_liveclockserver_func ( $attr, $content = null ) {
    3.     date_default_timezone_set('Europe/Moscow');
    4.     $time = getdate();
    5. return <<<HTML
    6.         <style>
    7. .polein {
    8. min-width: 168px; /* Ширина поля цифр + padding */
    9. height: 28px; /* Высота поля цифр*/
    10. background: #edf0e6;
    11. padding: 5px; /* Поля */
    12. border: none; /* Убираем рамку */
    13. text-align: center;
    14. outline: none;
    15.            }
    16.         </style>
    17.         <form name='lcs'><p><i class='fa fa-clock-o fa-lg' aria-hidden='true'></i>&nbsp;&nbsp;<strong>Точное время: </strong><input type='text' class='polein' name='lcs2'></p></form>
    18.         <script>
    19.             var second={$time['seconds']};
    20.             var minute={$time['minutes']};
    21.             var hour={$time['hours']};
    22.             document.lcs.lcs2.value='0';
    23.                 function display(){
    24.                     second++;
    25.                     if (second>=60){ second=0; minute++ }
    26.                     if (minute>=60){ minute=0; hour++ }
    27.                     if (hour>23){ hour=0; minute=0; second=0 }
    28.                     var cHour = hour;
    29.                     var cMinute = minute;
    30.                     var cSecond = second;
    31.                     if (second < 10) cSecond = '0' + second;
    32.                     if (minute < 10) cMinute = '0' + minute;
    33.                     if (hour < 10) cHour = '0' + hour;
    34.                     document.lcs.lcs2.value=cHour+':'+cMinute+':'+cSecond;
    35.                     setTimeout('display()',1000)
    36.                 }
    37.             display()
    38.         </script>
    39. HTML;
    40. }
    --- Добавлено ---
    @mkramer что делать с куском html?