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


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


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

#61 CbCoder

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

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

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

Цитата

if ($event['changed'][4401] || $event['changed'][4421])

Зачем вам это, не понял? Условия изменения полей задаются в настройках самого вычисления. Лишняя конструкция.

Цитата

strtotime($long_time + $line['Время начала приема'])

$long_time + strtotime($line['Время начала приема'])

Прежде чем прибавлять к дате секунды, ее для начала надо саму перевести в формат секунд, собственно для этого и нужна функция strtotime. Вы же зачем то пытаетесь перевести в этот формат уже сумму целиком, что абсолютно бессмысленно как с точки зрения самой суммы (2 разных типа данных), так и применения функции к ней.

Также не вижу закрывающую скобку в этой строке - открыто 2 скобки, закрыта одна. Это приведет к фатальной ошибке синтаксиса.

#62 Misha

    Новичок

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

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

Просмотр сообщенияCbCoder (22 Январь 2016 - 14:06) писал:

Зачем вам это, не понял? Условия изменения полей задаются в настройках самого вычисления. Лишняя конструкция.



$long_time + strtotime($line['Время начала приема'])

Прежде чем прибавлять к дате секунды, ее для начала надо саму перевести в формат секунд, собственно для этого и нужна функция strtotime. Вы же зачем то пытаетесь перевести в этот формат уже сумму целиком, что абсолютно бессмысленно как с точки зрения самой суммы (2 разных типа данных), так и применения функции к ней.

Также не вижу закрывающую скобку в этой строке - открыто 2 скобки, закрыта одна. Это приведет к фатальной ошибке синтаксиса.

Спасибо, поправил. Единственное не могу сослаться правильно на число длительность приема. В расчетной таблице текстовое поле и находится оно в табл. Справочники, там же соотв. поле с числом.
Пишу:

$line['Время окончания приема'] = date('Y-m-d H:i:s', strtotime($line['Время начала приема'])+$line['Длительность приемов']['Длительность приема в минутах']*60);

Не прибавляет ((

Какой функцией лучше воспользоваться для округления? Round?

#63 CbCoder

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

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

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

Цитата

Единственное не могу сослаться правильно на число длительность приема. В расчетной таблице текстовое поле и находится оно в табл. Справочники, там же соотв. поле с числом

Ничего не понял честно говоря. Подробнее опишите где что лежит и какие типы у полей. Иначе непонятны причины почему не работает (либо вы что-то не то делаете, либо описываете это не так)

Цитата

Какой функцией лучше воспользоваться для округления? Round?

http://php.net/manua...ction.round.php

#64 Misha

    Новичок

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

Отправлено 25 Январь 2016 - 11:38

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

Ничего не понял честно говоря. Подробнее опишите где что лежит и какие типы у полей. Иначе непонятны причины почему не работает (либо вы что-то не то делаете, либо описываете это не так)



http://php.net/manua...ction.round.php

Удалось самому отредактировать. Теперь все работает! Спасибо) Сейчас буду пробовать округлить

#65 master2015

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

  • Пользователи
  • PipPipPip
  • 35 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 18 Март 2016 - 01:24

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

#66 CbCoder

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

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

Отправлено 18 Март 2016 - 10:15

Таких встроенных ограничений в программе нет. Можно только самостоятельно его запрограммировать через JS к примеру.

#67 master2015

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

  • Пользователи
  • PipPipPip
  • 35 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 20 Март 2016 - 00:03

Цитата

Таких встроенных ограничений в программе нет. Можно только самостоятельно его запрограммировать через JS к примеру.
		a=document.getElementById('value5970').value;
		if (a>=date("Y-m-d H:i:s"))
				document.getElementById('main5970').value = 0;
				else
				function onchange_5970()
{
		if (document.getElementById('value5970').value>=date("Y-m-d H:i:s"))
				document.getElementById('main5970').value = 1;
		else
				document.getElementById('main5970').value = 0;
}
addHandler(document.getElementById('value5970'), 'onchange', onchange_5970);
Написал, но что то не срабатывает, ошибок тоже не выдает.
поле номер 5970 имеет стандартный формат даты КБ

Сообщение отредактировал master2015: 20 Март 2016 - 00:03


#68 CbCoder

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

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

Отправлено 21 Март 2016 - 09:54

Первое что бросается в глаза - функция date("Y-m-d H:i:s"), которую вы явно взяли из PHP-вычислений. Мало того что ее нет в JS, формат даты там не "Y-m-d H:i:s" - это внутреннее представление в БД, а JS в данном случае оперирует в тем что отображается на экране, т.е. с датой в локализованном виде.

Плюс какая-то очень странная у вас структура кода с позиции грамматики языка. Разве можно засовывать декларирование функции в условную команду? Да и логики не понял честно говоря, было бы не плохо если бы пояснили.

#69 master2015

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

  • Пользователи
  • PipPipPip
  • 35 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 22 Март 2016 - 22:19

1)получаем значение поля 5970, обьявляем его как переменная "а",
2) затем сравниваем условие если "а" больше или равно дате, то разрешаем сохранение даты в поле 5970.

дата откуда то берется, видимо если нет встроенной функции для JS, то можно взять из какого то соседнего фиксированого текстового поля которое редактировать 1 раз в сутки


3)если значение "а" меньше чем текущая дата, то вызывается функция которая ставит запрет на редактирование, и она же проверяется еще раз на изменение условия.

и еще вопрос, если дата редактируется напрямую в таблице (стоит галочка Редактировать в таблице) то это будет влиять на итоговый код?

Сообщение отредактировал master2015: 22 Март 2016 - 22:22


#70 CbCoder

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

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

Отправлено 23 Март 2016 - 09:29

Цитата

дата откуда то берется, видимо если нет встроенной функции для JS, то можно взять из какого то соседнего фиксированного текстового поля которое редактировать 1 раз в сутки

Встроенной функции насколько знаю нет, есть встроенный объект: http://javascript.ru/date Но с ним надо уметь работать, т.е. читать документацию и примеры. Он не идентичен date() в PHP.

Цитата

3)если значение "а" меньше чем текущая дата, то вызывается функция которая ставит запрет на редактирование, и она же проверяется еще раз на изменение условия.

У вас не вызов функции идет, а ее декларирование.

Цитата

и еще вопрос, если дата редактируется напрямую в таблице (стоит галочка Редактировать в таблице) то это будет влиять на итоговый код?

Нет, в таблице JS не работает.

#71 Юлиада

    Новичок

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

Отправлено 06 Май 2016 - 13:41

Добрый день. Нужно вычислять время которое прошло (Минут прошло) с размещения заявки, чтобы его было видно с таблицы.
Код:
//Расчитывает количество минут прошедших с момента размещения заявки до текущего времени
$line['Минут прошло'] = (strtotime(date("Y-m-d H:m:s")) - strtotime(date("Y-m-d H:m:s", strtotime($line['Время добавления'])))) / 60;

Вычисление установлено на событие: Отображение поля: Минут прошло.
Кажется что вычисление не запускается в режиме таблицы и информация не обновляется.

Подскажите пожалуйста, что нужно исправить.

Прикрепленные изображения

  • Прикрепленное изображение: Снимок экрана 2016-05-06 в 16.37.00.png


#72 CbCoder

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

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

Отправлено 24 Май 2016 - 09:33

Цитата

Кажется что вычисление не запускается в режиме таблицы и информация не обновляется

А что значит "не обновляется"? При обновлении страницы по F5 тоже не обновляется? И когда тогда обновляется, в режиме просмотра записи или после пересохранения? Или вообще в принципе никогда не обновляется?

#73 Юлиада

    Новичок

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

Отправлено 24 Май 2016 - 14:40

Вот как выглядит моя таблица с заявками, считается не правильно.
Не могу понять в какой момент вычисление отрабатывает.

Вычисление установлено на событие: Отображение поля: Минут прошло.

Прикрепленные изображения

  • Прикрепленное изображение: Снимок экрана 2016-05-24 в 16.35.28.jpg


#74 CbCoder

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

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

Отправлено 24 Май 2016 - 16:08

Значит не совсем правильно вопрос был поставлен, все у вас обновляется, но при этом вычисляется неверно. Основная ошибка - это использование "m" в качестве минут, тогда как "m" - это месяц, т.е. у вас вместо минут подставляется текущий месяц, естественно что в итоге вычисляться будет неверно. Минуты обознаются литералом "i", см. здесь.

Если замените минуты, то должно заработать, но вообще говоря, у вас код сам по себе избыточный. Это примерно тоже самое, что писать ((a+2)-2)+b вместо сокращенного a+b. У вас же все можно сократить до $line['Минут прошло'] = (time() - strtotime($line['Время добавления'])) / 60; Тогда кстати и проблема с минутами сама по себе отпадает.

#75 Юлиада

    Новичок

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

Отправлено 25 Май 2016 - 14:38

Спасибо! Теперь работает правильно!

#76 user103

    Участник

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

Отправлено 26 Январь 2017 - 15:24

Есть поле дата, 26.01.2017 14:36
как из него сделать 26.01.2017 00:00 ?

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

#77 CbCoder

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

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

Отправлено 27 Январь 2017 - 12:10

$line['Дата без времени'] = substr($line['Дата со временем'], 0, 10) . " 00:00:00";

http://php.net/substr

#78 zyryanov1970

    Участник

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

Отправлено 23 Март 2017 - 13:24

Добрый день.
Как правильно указать условие сравнения с конкретной датой?
Я хочу чтобы часть вычислений, которые срабатывают сейчас безусловно, работали бы только если дата, например, счета была бы больше конкретной даты, например, 01.04.2017.
Заранее спасибо.

#79 CbCoder

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

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

Отправлено 23 Март 2017 - 16:16

А в чем конкретно сложность? Не знаете как дату записать? Дата хранится в формате "2017-03-23 00:00:00", если что.

if ($line['Дата'] > "2017-03-23 00:00:00")


#80 zyryanov1970

    Участник

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

Отправлено 23 Март 2017 - 16:35

Спасибо )) Не думал, что так просто.





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

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