Дни рождения клиентов в календаре
- alena
- Сообщения: 51
- Зарегистрирован: 08 ноя 2022, 09:38
- Имя: Алена
- Откуда: Московская область
- Организация: ООО Пилкингтон Гласс
Re: Дни рождения клиентов в календаре
утром именно это не работало))) я им даже в поддержку написала... если сейчас норм, то круто, но уже и так записала через коммандер)
версию обновила, нули поставила, баг остался (( буду голову ломать, что не так, т.к. в этом куске проекта именно даты важнее всего и их надо вывести на календарь... я уже попыталась собрать дату 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)),
"")
- support
- Техническая поддержка
- Сообщения: 9210
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Дни рождения клиентов в календаре
А попробуйте в персональной версии повторить ошибку.
- support
- Техническая поддержка
- Сообщения: 9210
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Дни рождения клиентов в календаре
Попробуйте так:
Мы к текущей дате добавили 1 час в секундах.
Как я понял проблема в том, что пхп учитывает переход на летнее время, а mysql нет.
Хранить даты в timestamp было так себе решение. С одно стороны проще работать с формулами, но с другой проблемы с временными зонами.
Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))
Код: Выделить всё
UNIX_TIMESTAMP(ADDDATE(FROM_UNIXTIME([214]+3600,'%Y-%m-%d 00:00'), INTERVAL FROM_UNIXTIME([TODAY],'%Y')-FROM_UNIXTIME([214],'%Y') YEAR))
Как я понял проблема в том, что пхп учитывает переход на летнее время, а mysql нет.
Хранить даты в timestamp было так себе решение. С одно стороны проще работать с формулами, но с другой проблемы с временными зонами.
Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))
- alena
- Сообщения: 51
- Зарегистрирован: 08 ноя 2022, 09:38
- Имя: Алена
- Откуда: Московская область
- Организация: ООО Пилкингтон Гласс
Re: Дни рождения клиентов в календаре
Сергей, большое спасибо) помогло, хотя в целом это конечно временное решение, т.к. на следующий год и далее придется писать какую-то автоматизацию и перезаписывать даты рождения всех клиентов как вот в моем случае... надеюсь, к тому времени у вас появятся д.р. в системе и можно будет заменить старое решение на новое))
-
- Сообщения: 393
- Зарегистрирован: 03 мар 2022, 21:40
- Имя: Alex
- Откуда: Россия
- Контактная информация:
Re: Дни рождения клиентов в календаре
Насколько я знаю, TZ в MySQL учитывается. В файле настроек "my.cnf" ставиться параметр timezone='Europe/Moscow'.support писал(а): ↑08 июн 2023, 06:20 Попробуйте так:Мы к текущей дате добавили 1 час в секундах.Код: Выделить всё
UNIX_TIMESTAMP(ADDDATE(FROM_UNIXTIME([214]+3600,'%Y-%m-%d 00:00'), INTERVAL FROM_UNIXTIME([TODAY],'%Y')-FROM_UNIXTIME([214],'%Y') YEAR))
Как я понял проблема в том, что пхп учитывает переход на летнее время, а mysql нет.
Хранить даты в timestamp было так себе решение. С одно стороны проще работать с формулами, но с другой проблемы с временными зонами.
Возможно в будущем для дня рождения создам отдельное поле со всякими там напоминаниями об этом важном дне:)))
Так же вы можете указать time_zone в глобальных параметрах:
SET GLOBAL time_zone = 'Europe/Moscow';
Так что, с timestamp должно быть в порядке.
PS. Насколько я понимаю, работа в PHP с таймзонами реализовано через систему. В linux нужно вовремя обновлять tzdata, а в Windows - обновлением системы, потому что зоны обновляются достаточно часто. В России, насколько я помню, раз два-три меняли перевод часов и временные зоны. Нужно проверять актуальность операционки и настройку MySQL, потому что MySQL по умолчанию берез значение TZ из самой операционки. То есть по уму нужно проверить зону на операционке. Вопрос состоит в том, что операционка может быть в одном TZ, а PHP указывает на другой(в настройках Руководитель) и мы можем получить не корректное поведение, потому что в РК не реализовано как таковое поведение с разными TZ.
- support
- Техническая поддержка
- Сообщения: 9210
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Дни рождения клиентов в календаре
Да, в программе я принудительно задаю временную зону в файле includes\application_core.php
Потому что сделать изменения в "my.cnf" можно только на VDS и еще нужно это уметь.
date('P') = Разница с временем по Гринвичу с двоеточием между часами и минутами
Задать 'Europe/Moscow' тоже не всегда возможно, это нужно чтоб был доп. библиотека установлена.
Код: Выделить всё
db_query("SET time_zone = '" . date('P') . "'",false);
date('P') = Разница с временем по Гринвичу с двоеточием между часами и минутами
Задать 'Europe/Moscow' тоже не всегда возможно, это нужно чтоб был доп. библиотека установлена.
- Fait
- Инвестор
- Сообщения: 856
- Зарегистрирован: 19 ноя 2020, 17:46
- Имя: Максим Балакшеев
- Откуда: Россия, Златоуст
- Организация: ИП Балакшеев Максим Георгиевич
Re: Дни рождения клиентов в календаре
А попробуйте поле Динамическая дата со следующей формулой:
999 - номер поля с датой рождения
Код: Выделить всё
SELECT UNIX_TIMESTAMP(MAKEDATE(YEAR(NOW()),DAYOFYEAR(FROM_UNIXTIME([999],"%Y-%m-%d"))))
- alena
- Сообщения: 51
- Зарегистрирован: 08 ноя 2022, 09:38
- Имя: Алена
- Откуда: Московская область
- Организация: ООО Пилкингтон Гласс
Re: Дни рождения клиентов в календаре
Попробовала - к сожалению, нет, при д.р. 02.04.1986 выдает 01.04.2023Fait писал(а): ↑08 июн 2023, 23:05 А попробуйте поле Динамическая дата со следующей формулой:999 - номер поля с датой рожденияКод: Выделить всё
SELECT UNIX_TIMESTAMP(MAKEDATE(YEAR(NOW()),DAYOFYEAR(FROM_UNIXTIME([999],"%Y-%m-%d"))))
пока пользуюсь методом "плюс час" - вроде работает)