1 January 1970

InstantCMS 2.X

Что я делаю не так?

#1 29 января 2025 в 16:50

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

В контенте вызываю функцию следующим образом: {reportsgo|format_date_new}, чекбокс: обрабатывать специальные шаблоны, включен.

Собственно сама функция выглядит так, честно сказать, плаваю в данной теме, ООП моё, там бы уже давно реализовал, но тут по аналогии не получается.

  1. function format_date_new($date_in) {
  2.  
  3. // поле $date_in в БД - timestamp (2024-11-13 16:14:00)
  4. $dateString = $date_in;
  5. /* return var_dump($dateString) возвращает: string(60) "13.11.2024" */
  6. /* return $dateString; возвращает в поле контента: 13.11.2024 */
  7.  
  8. /* Формат даты PHP - d.m.Y, Формат даты JavaScript - dd.mm.yy */
  9. $format = 'd.m.Y'; // Формат строки
  10. $timestamp = date($format, strtotime($dateString));
  11. /* return var_dump($timestamp); возвращает: string(14) "1 January 1970"*/
  12. /* return $timestamp; //возвращает в поле контента: 1 January 1970*/
  13.  
  14. /* $timestamp = lang_date(date($format,strtotime($timestamp))); */
  15.  
  16. return $timestamp; // возвращает дату: 1 January 1970, а должно быть 13 ноября 2024 года
#2 29 января 2025 в 17:41

ООП моё

Sviridovve

Так им и пользуйтесь

  1. <?php
  2. $dt = new DateTime('2024-11-13 16:14:00');
  3. $out = $dt->format('d.m.Y');
  4. var_dump($out);
  5. // string(10) "13.11.2024"
#3 29 января 2025 в 18:03
ООП моё Sviridovve Так им и пользуйтесь <?php $dt = new DateTime('2024-11-13 16:14:00'); $out = $dt->format('d.m.Y'); var_dump($out); // string(10) «13.11.2024»
IamB
  1. function format_date_new($date_in) {
  2. $dt = new DateTime($date_in);
  3. $out = $dt->format('d.m.Y');
  4. return $out;
  5. }

Fatal error: Uncaught DateMalformedStringException: Failed to parse time string (<time datetime=«2024-11-13T16:14:00+03:00»>13.11.2024</time> <span class=«time»>16:14</span>) at position 0 (<): Unexpected character in...

Сегодня в 19:40
#4 29 января 2025 в 18:39
yozh@Inspiron-3542:~/php-apps/icms216.loc/drafts$ php -f time.php
string(10) «13.11.2024»
yozh@Inspiron-3542:~/php-apps/icms216.loc/drafts$ php -v
PHP 8.3.16 (cli) (built: Jan 19 2025 13:45:59) (NTS)
Copyright © The PHP Group
Zend Engine v4.3.16, Copyright © Zend Technologies
    with Zend OPcache v8.3.16, Copyright ©, by Zend Technologies
Добавлено спустя 7 минут

1)Вы запустите, что я вам прислал. 2)Ошибка в неправильно отформатированной строке, что вы передаете в функцию

Добавлено спустя 23 минуты

Если вы передаете в функцию строку вида '13.11.2024', то объект DataTime можно создать так

  1. $dt = DateTime::createFromFormat('d.m.Y', '13.11.2024');
#5 29 января 2025 в 22:34

 Sviridovve, вам надо очистить строку с датой от «примесей». Например регуляркой "/\d{4}-\d{2}-\d{2}.\d{2}:\d{2}:\d{2}/gm", как-то так.

  1. function format_date_new($date_in) {
  2. preg_match('/\d{4}-\d{2}-\d{2}.\d{2}:\d{2}:\d{2}/gm', $date_in, $matches);
  3. return lang_date(date('d.m.Y', strtotime($matches[0])));
  4. }

 Но это не точно, возможно «Т» будет ещё мешать. Это лишь направление куда вам «идти» )))

#6 30 января 2025 в 06:47
 Sviridovve, вам надо очистить строку с датой от «примесей». Например регуляркой "/\d{4}-\d{2}-\d{2}.\d{2}:\d{2}:\d{2}/gm", как-то так.
Loadырь

Спасибо за подсказку, решил таким путем, не претендую на правильность, но на данный момент решение работает, если есть замечания прошу ткнуть носом, так делать нельзя.

  1. function format_date_new($date_in) {
  2.  
  3. $dateString1 = html($date_in, false);
  4. $dateString2 = html_clean($dateString1);
  5. $dateString3 = html_minify($dateString2);
  6. $extractedString = substr($dateString3,24,10);
  7. $format = 'j F Y'; // Формат строки
  8. $timestamp = date($format, strtotime($extractedString));
  9. $timestampru=lang_date(date('j F Y', strtotime($timestamp)));
  10.  
  11. return $timestampru;
  12. }
Добавлено спустя 3 минуты
Спойлер yozh@Inspiron-3542:~/php-apps/icms216.loc/drafts$ php -f time.phpstring(10) «13.11.2024»yozh@Inspiron-3542:~/php-apps/icms216.loc/drafts$ php -vPHP 8.3.
IamB

Там на самом деле передается поле как символьное в котором много лишнего, вот для примера, в таком виде: <time datetime=«2024-03-14T16:14:00+03:00»>14.03.2024</time> <span class=«time»>16:14</span>, поэтому функция strtotime() не в состоянии понять что от нее хотят. Спасибо за помощь.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.