Перейти к содержимому


Возврат дня недели


Сообщений в теме: 18

#1 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 29 Апрель 2010 - 10:24

Здравствуйте разработчики! Знаю, есть такие функции, которые возвращают из даты к примеру день - day(), месяц, год... Скажите, а есть ли функция для возврата дня недели?

Объясню для чего это нужно. Допустим надо напомнить менеджеру о дне рождении клиента. А этот день рождения будет в воскресенье! Соответственно в этот день менеджера не будет на работе... Соответственно хотелось бы получить запрос: если день и месяц равны текущим И день недели равно воскресенью, то напомнить за 2 дня о дне рождении!

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Апрель 2010 - 10:42

http://phpclub.ru/my...-functions.html

Т.е. конкретно в вашем примере нужна функция weekday()

#3 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 29 Апрель 2010 - 10:46

Опа, дак Ваша программа поддерживает ЛЮБУЮ функцию mysql??? Клево!!! Спасибо ОГРОМНОЕ!!!

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Апрель 2010 - 10:50

В условиях фильтров и напоминаний - да. По сути они представляют собой запись условия WHERE на SQL.

#5 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 29 Апрель 2010 - 11:12

Почему запрос не верный? Не выводится напоминалка!
weekday(`Дата Рождения`)='6' and day(`Дата Рождения`)=day('{текущая дата}') + 1 and month(`Дата Рождения`)=month('{текущая дата}') and `Диспонент`='{текущий}' and `Дата Рождения`!='{пустая дата}'

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

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Апрель 2010 - 11:24

weekday(`Дата Рождения`) выдаст вам день недели непосредственно когда человек родился, а не в этом году.

Вам нужно к текущей дате прибавить 2 дня и затем проверить два условия: 1) число и месяц этого дня совпадает с днем и месяцем дня рождения; 2) этот день - воскресенье

Т.е.:

1) day(`Дата Рождения`) = day('{текущая дата}' + interval 2 day) AND month(`Дата Рождения`) = month('{текущая дата}' + interval 2 day)
2) weekday('{текущая дата}' + interval 2 day) = 6

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Апрель 2010 - 11:29

Как вы понимаете, так тоже делать нельзя:

day(`Дата Рождения`)=day('{текущая дата}') + 1 and month(`Дата Рождения`)=month('{текущая дата}')

т.к. на границах месяцев у вас получится некорректная дата (32 мая к примеру). Поэтому дни нужно прибавлять через функцию interval N day, как в примере выше

#8 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 29 Апрель 2010 - 11:32

Спасибо Огромнейшее! И почему я не пошел на программиста учиться? :(

#9 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 11 Апрель 2013 - 00:23

Как сделать чтоб в таблице по работе с клиентами отображалась не только дата, но и день недели. Создал отдельное поле "День недели" теперь пытаюсь заполнить его вычислением по аналогии выше.
Прописал так $line['День недели'] = $weekday(`Дата`);
Выходит ошибка Fatal error: Function name must be a string
Как правильно создать вычисление?

#10 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2013 - 07:40

$days = array("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота");
$i = date("w", strtotime($line['Дата']));
$line['День недели'] = $day[$i];


#11 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 11 Апрель 2013 - 22:29

Roman, спасибо.
Но почему-то вычисление не происходит. Тип поля установил текст. Установил вычислять при условии Сохранения в таблице и изменения поля Дата. Но поле остается пустым и ничего не происходит. В чем может быть причина? Версия 1.9.7

#12 Гость_Roman_*

  • Гости

Отправлено 12 Апрель 2013 - 07:27

Прошу прощенья, в последней строке должно быть не $day, а $days.

#13 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 12 Апрель 2013 - 23:20

Большущее СПАСИБО!!! :D

#14 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 13 Июнь 2013 - 05:06

Еще один вопрос по дате. Хочу сделать чтоб доверенность автоматически была действительна 10 дней. Добавляю вычисление
$line['Действительна по'] = $line['Дата выдачи']+ 10;
Вычисление не работает. Как правильно сделать вычисление?

#15 Гость_Roman_*

  • Гости

Отправлено 13 Июнь 2013 - 07:35

$line['Действительна по'] = date("Y-m-d H:i:s", strtotime($line['Дата выдачи']) + (60*60*24*10));


#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Июнь 2013 - 09:52

Просмотр сообщенияf-jeka (13 Июнь 2013 - 05:06) писал:

Вычисление не работает. Как правильно сделать вычисление?

Суть в том, что у вас не указано, что такое эти "10" - дней, месяцев, лет? А может и часов/минут/секунд, если это дата со временем? В коде выше дата преобразуется в формат timestamp (дата в секундах), затем прибавляется нужный период в секундах, затем timestamp снова преобразуется в дату. Существуют и другие алгоритмы работы с датой, подробности можно посмотреть в руководстве к PHP.

#17 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 13 Июнь 2013 - 11:22

Спасибо за разъяснение. Самостоятельно такие вычисления пока не научился писать. Большое спасибо за ответ!

#18 MrZlo

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 16 Ноябрь 2015 - 11:11

Просмотр сообщенияRoman (11 Апрель 2013 - 07:40) писал:

$days = array("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота");
$i = date("w", strtotime($line['Дата']));
$line['День недели'] = $day[$i];
Сделал поле таблицы где выводятся день недели относительно заданной даты.

А как можно сделать условие в уведомлениях что бы к примеру из 'День недели' забиралось значение и проверялось с текущим днем недели. Ну что бы предположим каждый вторник через каждый час напоминание выводилось.
Или я заморачиваюсь? В календаре не нашел таких возможностей

#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 16 Ноябрь 2015 - 11:33

В напоминаниях такое не задашь в стандартном конструкторе условий ,т.е. там нет дней недели. Но можно попробовать задать в режиме эксперта с использованием функций работы с датами MySQL





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных