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


Операции с датами


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

#41 easysoftware

    Участник

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

Отправлено 21 Май 2015 - 09:29

Просмотр сообщенияCbCoder (20 Май 2015 - 17:00) писал:

Не понял, где именно выбрать? Что значит "в поле не дает выбрать вычисление"?

В свойствах поля Возраст таблицы Животное https://yadi.sk/i/NNN-h_MJgmoNh не дает выбрать вычисление, хотя оно есть https://yadi.sk/i/Gi8ALlFQgmoUK

#42 CbCoder

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

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

Отправлено 21 Май 2015 - 12:12

Вы путаете одно с другим. Конструктор вычислений не предназначен для выбора вычисления, он служит для конструирования вычисления с нуля, как альтернатива созданию его вручную в разделе Вычислений. Т.к. вы уже добавили вычисление именно там, то разумеется никакой конструктор вам уже не нужен. А причина неработы вычисления может быть в другом, например в отсутствии или неверном указании событий, при котором оно должно срабатывать. Какие события вы указали? Выложите скриншот настроек вычисления.

#43 easysoftware

    Участник

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

Отправлено 21 Май 2015 - 15:38

Событие не указывал никакое, т.к. предполагается, что будет считать все время. https://yadi.sk/i/xPGMYAp7gnLc5
Или указание события обязательно? Если да, то какое выбрать в случае, если нужно постоянно?

#44 CbCoder

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

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

Отправлено 21 Май 2015 - 18:20

Просмотр сообщенияeasysoftware (21 Май 2015 - 15:38) писал:

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

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

Цитата

Если да, то какое выбрать в случае, если нужно постоянно?

Если под "постоянно" подразумевается пересчет поля при каждом обращении к нему, логично использовать событие "отображение поля".

#45 easysoftware

    Участник

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

Отправлено 22 Май 2015 - 16:05

Спасибо

#46 zyryanov1970

    Участник

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

Отправлено 16 Июнь 2015 - 15:52

Добрый день.
Делаю выборку по таблице "Счета" за несколько дат. Например, 01.06.2015-10.06.2015.
Хочу для списка (не отдельной записи) сделать удобный для меня шаблон печати.
В заголовке шаблона печати хочу указать обе даты. Например "Реестр за 01.06.2015-10.06.2015".
Вставка кода поля {$Дата} выдаст только одну дату, как понял, из первой записи в выборке.
Как вывести обе даты?

#47 CbCoder

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

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

Отправлено 16 Июнь 2015 - 17:59

Хм, интересный вопрос. Штатных средств для этого к сожалению нет, хотя вы не первый кто поднимает похожую задачу. Теоретически наверное можно вытащить из переменных сессии, в smarty (на котором пишутся шаблоны) есть возможность их получить.

#48 zyryanov1970

    Участник

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

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

Жаль, конечно. Но спасибо!

#49 lenar

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина

Отправлено 03 Сентябрь 2015 - 15:13

Надо чтобы считалось количество 'Заявки без статуса' по 20 числа каждого месяца.
Написал такой код:

if (date("d") <= 20) {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n")-1, 20, date("Y")));
}
else {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n"), 20, date("Y")));
}
	$res = sql_query("SELECT COUNT(f1680) AS counts
		  FROM ".DATA_TABLE."130
		  WHERE status = 0
			AND f1680 = ''
			AND f1750 = ".$line['Партнер']['raw']."
			AND strtotime(".$a.") >= strtotime(".$line['Дата заявки']));
$row = sql_fetch_assoc($res);
$line['Партнер']['Заявки без статуса'] = $row['counts'];

Выдает ошибку такую:

Цитата

syntax error, unexpected ')'


Если убрать ')', то такую:

Цитата

Ошибка SQL запроса:
SELECT COUNT(f1680) AS counts FROM f_data130 WHERE status = 0 AND f1680 = '' AND f1750 = 1 AND strtotime(2015-08-20 15:11:18) >= strtotime(2015-08-31 18:10:00
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '15:11:18) >= strtotime(2015-08-31 18:10:00' at line 6

Что делаю не правильно?

#50 CbCoder

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

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

Отправлено 04 Сентябрь 2015 - 09:31

Скобку не убрать надо было, а поместить в кавычки (т.к. она часть SQL запроса, а не PHP выражения, на что он и ругался, типа "убери лишнюю")

AND strtotime(".$a.") >= strtotime(".$line['Дата заявки'].")");

#51 lenar

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина

Отправлено 04 Сентябрь 2015 - 10:42

Спасибо, эту ошибку преодолели.
Теперь на такой код:

if (date("d") <= 20) {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n")-1, 20, date("Y")));
}

else {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n"), 20, date("Y")));

}
	$res = sql_query("SELECT COUNT(f1680) AS counts
		  FROM ".DATA_TABLE."130
		  WHERE status = 0
			AND f1680 = ''
			AND f1750 = ".$line['Партнер']['raw']."
			AND strtotime(".$a.") >= strtotime(".$line['Дата заявки'].")");
$row = sql_fetch_assoc($res);
$line['Партнер']['Заявки без статуса'] = $row['counts'];

выдает такую ошибку:

Цитата

13: AND f1750 = ".$line['f1750']['raw']."
14: AND strtotime(".$a.") >= strtotime(".$line['f1670'].")");
15: $row = sql_fetch_assoc($res);

Ошибка SQL запроса:
SELECT COUNT(f1680) AS counts FROM f_data130 WHERE status = 0 AND f1680 = '' AND f1750 = 2 AND strtotime(2015-08-20 10:38:47) >= strtotime(2015-09-01 13:04:00)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '10:38:47) >= strtotime(2015-09-01 13:04:00)' at line 6


В чем причина? подскажите, пожалуйста.

#52 CbCoder

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

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

Отправлено 04 Сентябрь 2015 - 11:12

Да, сразу не обратил внимание, что у вас сам запрос некорректный. Зачем вы используете strtotime внутри запроса? Это php-функция. Да и она тут в принципе не нужна.

#53 lenar

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина

Отправлено 04 Сентябрь 2015 - 14:57

Набрал код без использования strtotime():

if (date("d") <= 20) {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n")-1, 20, date("Y")));
}
else {
  $a = date("Y-m-d H:i:s",mktime(date("H"), date("i"), date("s"), date("n"), 20, date("Y")));
}
	$res = sql_query("SELECT COUNT(f1680) AS counts
		  FROM ".DATA_TABLE."130
		  WHERE status = 0
			AND f1680 = ''
			AND f1750 = ".$line['Партнер']['raw']."
			AND ".$a." >= ".$line['Дата заявки']);
		  
$row = sql_fetch_assoc($res);
$line['Партнер']['Заявки без статуса'] = $row['counts'];

Получается такое:

Цитата

13: AND f1750 = ".$line['f1750']['raw']."
14: AND ".$a." >= ".$line['f1670']);
15:

Ошибка SQL запроса:
SELECT COUNT(f1680) AS counts FROM f_data130 WHERE status = 0 AND f1680 = '' AND f1750 = 1 AND 2015-08-20 14:46:24 >= 2015-07-22 00:00:00
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '14:46:24 >= 2015-07-22 00:00:00' at line 6


Не могу понять что не так) Подскажите, пожалуйста.

#54 CbCoder

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

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

Отправлено 04 Сентябрь 2015 - 15:12

Дата - это строковое значение, она должна быть в кавычках. В данном случае, в одинарных кавычках, т.к. вся строка запроса в двойных.

AND '".$a."' >= '".$line['Дата заявки']."'");


#55 lenar

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина

Отправлено 04 Сентябрь 2015 - 21:25

Просмотр сообщенияCbCoder (04 Сентябрь 2015 - 15:12) писал:

Дата - это строковое значение, она должна быть в кавычках. В данном случае, в одинарных кавычках, т.к. вся строка запроса в двойных.

AND '".$a."' >= '".$line['Дата заявки']."'");

Спасибо большое! Получилось!

#56 Misha

    Новичок

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

Отправлено 18 Январь 2016 - 15:53

Подскажите как рассчитывать поле "окончание приема" в категории "Прием" табл. "Журнал записей", если есть "начало приема" и "длительность приема". Поле "длительность приема" выбирается из списка по связи к категории "Справочники" табл. "Длительность приема" поле "Продолжительность приема": 30 час, 40 мин., 1 час и т.д. Поле табл. "Длительность приема", на которое должна идти ссылка расчета звучит как "Продолжительность приема в минутах" где соответственно обозначение 30, 40, 60, 120 и т.д.

Сообщение отредактировал Misha: 18 Январь 2016 - 16:27


#57 Misha

    Новичок

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

Отправлено 18 Январь 2016 - 16:01

Можно ли при внесении новой записи "Начало приема" минуты округлялись до 00 или до 30 после сохранения? При этом поле со временем можно было редактировать. Что здесь нужно прописать?

#58 CbCoder

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

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

Отправлено 18 Январь 2016 - 16:23

Просмотр сообщенияMisha (18 Январь 2016 - 15:53) писал:

Подскажите как рассчитывать поле "окончание приема", если есть "начало приема" и "длительность приема". Поле "длительность приема" выбирается из списка по связи к табл. "Справочники" подтабл. "Длительность приема" поле "Продолжительность приема": 30 час, 40 мин., 1 час и т.д. Поле подтабл. "Длительность приема", на которое должна идти ссылка расчета звучит как "Продолжительность приема в минутах" где соответственно обозначение 30, 40, 60, 120 и т.д.

Как вариант: переводите начало приема в минуты с начала дня, прибавляете количество минут продолжительности и переводите полученное число минут обратно в часы-минуты.

Просмотр сообщенияMisha (18 Январь 2016 - 16:01) писал:

Можно ли при внесении новой записи "Начало приема" минуты округлялись до 00 или до 30 после сохранения? При этом поле со временем можно было редактировать. Что здесь нужно прописать?

Например поделить то же количество минут (см.выше) на 30, округлить и снова умножить на 30, затем обратно перевести в часы-минуты. Вариантов много можно придумать.

#59 Misha

    Новичок

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

Отправлено 18 Январь 2016 - 16:47

Спасибо! Буду пробовать))

#60 Misha

    Новичок

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

Отправлено 22 Январь 2016 - 13:01

Никак не могу додумать из-за нехватки знаний.
Помогите, пожалуйста!

if ($event['changed'][4401] || $event['changed'][4421]) // изменения Время начала приема или Длительность приема
{
$long_time = $line['Справочники']['Длительность приема в минутах']*60;
$line['Время окончания приема'] = date('Y-m-d H:i:s', strtotime($long_time + $line['Время начала приема']);
}





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

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