Страница 2 из 4

Re: Дни рождения клиентов в календаре

Добавлено: 07 июн 2023, 16:20
support
Не мучайтесь:) Правой кнопкой на архив!

Re: Дни рождения клиентов в календаре

Добавлено: 07 июн 2023, 16:27
alena
support писал(а): 07 июн 2023, 16:20 Не мучайтесь:) Правой кнопкой на архив!
утром именно это не работало))) я им даже в поддержку написала... если сейчас норм, то круто, но уже и так записала через коммандер)

версию обновила, нули поставила, баг остался (( буду голову ломать, что не так, т.к. в этом куске проекта именно даты важнее всего и их надо вывести на календарь... я уже попыталась собрать дату php скриптом, да толку - в календаре нельзя выбрать поле другого типа кроме дат)

Изображение

вот, картинку вставила... еще и с 1986г какая-то ерунда...)) так же не бывает)) точный код (224 поле - Дата с календарем) -

if([224]>0,
UNIX_TIMESTAMP(ADDDATE(FROM_UNIXTIME([224],'%Y-%m-%d 00:00'), INTERVAL FROM_UNIXTIME([TODAY],'%Y')-FROM_UNIXTIME([224],'%Y') YEAR)),
"")

Re: Дни рождения клиентов в календаре

Добавлено: 07 июн 2023, 16:36
support
А попробуйте в персональной версии повторить ошибку.

Re: Дни рождения клиентов в календаре

Добавлено: 07 июн 2023, 16:45
alena
support писал(а): 07 июн 2023, 16:36 А попробуйте в персональной версии повторить ошибку.
https://pdemo.rukovoditel.pro/3.4/index ... mo_id=2274

получилось повторить

Re: Дни рождения клиентов в календаре

Добавлено: 08 июн 2023, 06:20
support
Попробуйте так:

Код: Выделить всё

UNIX_TIMESTAMP(ADDDATE(FROM_UNIXTIME([214]+3600,'%Y-%m-%d 00:00'), INTERVAL FROM_UNIXTIME([TODAY],'%Y')-FROM_UNIXTIME([214],'%Y') YEAR))
Мы к текущей дате добавили 1 час в секундах.

Как я понял проблема в том, что пхп учитывает переход на летнее время, а mysql нет.

Хранить даты в timestamp было так себе решение. С одно стороны проще работать с формулами, но с другой проблемы с временными зонами.

Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))

Re: Дни рождения клиентов в календаре

Добавлено: 08 июн 2023, 12:33
alena
support писал(а): 08 июн 2023, 06:20 Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))
Сергей, большое спасибо) помогло, хотя в целом это конечно временное решение, т.к. на следующий год и далее придется писать какую-то автоматизацию и перезаписывать даты рождения всех клиентов как вот в моем случае... надеюсь, к тому времени у вас появятся д.р. в системе и можно будет заменить старое решение на новое))

Re: Дни рождения клиентов в календаре

Добавлено: 08 июн 2023, 16:39
alexinc
support писал(а): 08 июн 2023, 06:20 Попробуйте так:

Код: Выделить всё

UNIX_TIMESTAMP(ADDDATE(FROM_UNIXTIME([214]+3600,'%Y-%m-%d 00:00'), INTERVAL FROM_UNIXTIME([TODAY],'%Y')-FROM_UNIXTIME([214],'%Y') YEAR))
Мы к текущей дате добавили 1 час в секундах.

Как я понял проблема в том, что пхп учитывает переход на летнее время, а mysql нет.

Хранить даты в timestamp было так себе решение. С одно стороны проще работать с формулами, но с другой проблемы с временными зонами.

Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))
Насколько я знаю, TZ в MySQL учитывается. В файле настроек "my.cnf" ставиться параметр timezone='Europe/Moscow'.
Так же вы можете указать time_zone в глобальных параметрах:
SET GLOBAL time_zone = 'Europe/Moscow';
Так что, с timestamp должно быть в порядке.
PS. Насколько я понимаю, работа в PHP с таймзонами реализовано через систему. В linux нужно вовремя обновлять tzdata, а в Windows - обновлением системы, потому что зоны обновляются достаточно часто. В России, насколько я помню, раз два-три меняли перевод часов и временные зоны. Нужно проверять актуальность операционки и настройку MySQL, потому что MySQL по умолчанию берез значение TZ из самой операционки. То есть по уму нужно проверить зону на операционке. Вопрос состоит в том, что операционка может быть в одном TZ, а PHP указывает на другой(в настройках Руководитель) и мы можем получить не корректное поведение, потому что в РК не реализовано как таковое поведение с разными TZ.

Re: Дни рождения клиентов в календаре

Добавлено: 08 июн 2023, 16:54
support
Да, в программе я принудительно задаю временную зону в файле includes\application_core.php

Код: Выделить всё

db_query("SET time_zone = '" . date('P') . "'",false);
Потому что сделать изменения в "my.cnf" можно только на VDS и еще нужно это уметь.
date('P') = Разница с временем по Гринвичу с двоеточием между часами и минутами
Задать 'Europe/Moscow' тоже не всегда возможно, это нужно чтоб был доп. библиотека установлена.

Re: Дни рождения клиентов в календаре

Добавлено: 08 июн 2023, 23:05
Fait
А попробуйте поле Динамическая дата со следующей формулой:

Код: Выделить всё

SELECT UNIX_TIMESTAMP(MAKEDATE(YEAR(NOW()),DAYOFYEAR(FROM_UNIXTIME([999],"%Y-%m-%d"))))
999 - номер поля с датой рождения

Re: Дни рождения клиентов в календаре

Добавлено: 15 июн 2023, 11:30
alena
Fait писал(а): 08 июн 2023, 23:05 А попробуйте поле Динамическая дата со следующей формулой:

Код: Выделить всё

SELECT UNIX_TIMESTAMP(MAKEDATE(YEAR(NOW()),DAYOFYEAR(FROM_UNIXTIME([999],"%Y-%m-%d"))))
999 - номер поля с датой рождения
Попробовала - к сожалению, нет, при д.р. 02.04.1986 выдает 01.04.2023
пока пользуюсь методом "плюс час" - вроде работает)