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


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


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

#21 CbCoder

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

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

Отправлено 27 Июнь 2014 - 09:50

У вас имена полей в запросе в прямых скобках вместо "косых". Дата здесь не причем.

`f4651`='Нет' - верно
'f4661'='0' - ошибка

P.S. Рекомендуется также использовать функцию data_update для запроса на обновление записи.

#22 Sebastien

    Новичок

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

Отправлено 06 Август 2014 - 09:40

Подскажите как правильно сравнивать даты в запросе!

Так не работает

$date1 = date("d.m.Y",strtotime(form_eng_time($_REQUEST['date1'])));
$sqlQuery = "SELECT count(*) as cnt FROM ".DATA_TABLE."321 WHERE f4301>=$date1";

Сообщение отредактировал Sebastien: 06 Август 2014 - 09:41


#23 CbCoder

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

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

Отправлено 06 Август 2014 - 10:04

Зачем вы преобразовываете дату в формат "d.m.Y"? В БД она хранится в ином виде, и функция form_eng_time как раз приводит к ней, т.е любые дополнительные преобразования излишни:

$date1 = form_eng_time($_REQUEST['date1']);

#24 Sebastien

    Новичок

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

Отправлено 06 Август 2014 - 10:32

Просмотр сообщенияCbCoder (06 Август 2014 - 10:04) писал:

Зачем вы преобразовываете дату в формат "d.m.Y"? В БД она хранится в ином виде, и функция form_eng_time как раз приводит к ней, т.е любые дополнительные преобразования излишни:

$date1 = form_eng_time($_REQUEST['date1']);

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

if ($_REQUEST['date1']) $date1 = date("d.m.Y",strtotime(form_eng_time($_REQUEST['date1'])));
else $date1 = date("d.m.Y", mktime(0,0,0,date("m"),date("d")-7,date("Y")));

а дальше я хотел сделать запрос где f4301>=$date1

такой вариант $date1 = form_eng_time($_REQUEST['date1']) что то тоже у меня не считает

Сообщение отредактировал Sebastien: 06 Август 2014 - 10:34


#25 CbCoder

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

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

Отправлено 06 Август 2014 - 10:53

Цитата

Просто выше такой код идет, я взял из другого отчета по аналогии

И $date1 там помещается в запрос что ли? Эта переменная скорее всего используется для вывода на экран, т.к. формат "d.m.Y" привычен для русскоязычного пользователя, но это не формат хранения даты в БД.

Цитата

такой вариант $date1 = form_eng_time($_REQUEST['date1']) что то тоже у меня не считает

Значит у вас в $_REQUEST['date1'] дата в каком-то нестандартном виде, или ее вообще там нет, или вообще нет такой переменной. Такое ощущение, что вы просто дергаете фрагменты из отчета вне контекста, естественно что так ничего работать не будет.

#26 Sebastien

    Новичок

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

Отправлено 07 Август 2014 - 10:35

Цитата

Такое ощущение, что вы просто дергаете фрагменты из отчета вне контекста, естественно что так ничего работать не будет.
Да знания по программированию очень поверхностные)

Вот так вроде заработало:
$sqlQuery = "SELECT count(*) as cnt FROM ".DATA_TABLE."321 WHERE f4301>='".form_eng_time($date1." 00:00:00")."'";

#27 Tony999

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

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 13 Ноябрь 2014 - 02:58

Просмотр сообщенияCbCoder (19 Март 2014 - 13:14) писал:

$bd = strtotime($line['Дата начала']);
$line['Дата окончания'] = date("Y-m-d H:s:i", mktime(date("H",$bd),date("i",$bd),date("s",$bd),date("m",$bd)+10,date("d",$bd),date("Y",$bd)));

А 31 февраля тут разве не будет?
Умные сайты на заказ
https://info.crm-master.info

#28 CbCoder

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

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

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

Нет, функция mktime как раз корректно обрабатывает арифметические операции с компонентами даты. Собственно поэтому она тут и применена для прибавления месяцев. В частности, "31 февраля" преобразуется в 3 марта для невысокосного года.

#29 Tony999

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

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 18 Ноябрь 2014 - 18:41

Так я про то и спрашиваю. Если к 31 января прибавить месяц должно быть 28 (или 29) февраля, а не 3 марта.
Как вот это сделать?
-------------
В инете нашел:

"просто берёте месяц, прибавляете к нему единицу если уже не 12
затем собираете дату и проверяете корректна ли она при помощи функции
checkdate если нет то уменьшаете день до тех пор пока не будет корректна"

function dateAfterMonth($m=1,$d=1,$y=1970)
{
if($m == 12){
return strtotime("+1 month",mktime(0,0,0,$m,$d,$y));
}

++$m;
while(true){
if(checkdate($m,$d,$y)){
break;
}
--$d;
}
return mktime(0,0,0,$m,$d,$y);
}

Сообщение отредактировал Tony999: 19 Ноябрь 2014 - 00:51

Умные сайты на заказ
https://info.crm-master.info

#30 Oda

    Новичок

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

Отправлено 11 Февраль 2015 - 17:06

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

#31 sergeyerov

    Новичок

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

Отправлено 19 Февраль 2015 - 16:41

Добрый день у меня вот такая проблема я не могу понять куда вставлять js код. У меня есть два поля Дата регистрации, Окончание регистрации

Я вставляю этот код в окончание регистрации и он ничего не происходит! Но мне по сути надо что, Есть регистрация домена, надо что бы за 10 дней строчка становилась красной и было напоминание чтоб не забыл оплатить домен. И второе автоматом к дате заполнения проставлял дату окончания

$bd = strtotime($line['Дата регистрации']);
$line['Окончание регистрации'] = date("Y-m-d H:s:i", mktime(date("H",$bd),date("i",$bd),date("s",$bd),date("m",$bd)+12,date("d",$bd),date("Y",$bd)));

#32 CbCoder

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

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

Отправлено 24 Февраль 2015 - 14:13

Это не JS код, это код вычисления на PHP. Возможно вы не туда вставляете его.

#33 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 12 Март 2015 - 15:27

А как вернуть полю типа "Дата" пустое значение. Присвоение 000-00-00 приводит к появлению некорректной даты.

Не работает казалось бы простой алгоритм:

if ($line['Дата начала полномочий']!= "000-00-00") {
$line['Срок полномочий'] = date("Y-m-d H:i:s", strtotime($line['Дата начала полномочий'])+2*365);
}
else {
$line['Срок полномочий']="000-00-00";
}

Задача простоя - если есть "Дата начала полномочий", то автоматически должно появляться значение в "Срок полномочий" плюс два года. Если нет, то должно оставаться пустым.

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

#34 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 12 Март 2015 - 16:15

Просмотр сообщенияАлександр Пономарев (12 Март 2015 - 15:27) писал:

А как вернуть полю типа "Дата" пустое значение. Присвоение 000-00-00 приводит к появлению некорректной даты.

Не работает казалось бы простой алгоритм:

if ($line['Дата начала полномочий']!= "000-00-00") {
$line['Срок полномочий'] = date("Y-m-d H:i:s", strtotime($line['Дата начала полномочий'])+2*365);
}
else {
$line['Срок полномочий']="000-00-00";
}

Задача простоя - если есть "Дата начала полномочий", то автоматически должно появляться значение в "Срок полномочий" плюс два года. Если нет, то должно оставаться пустым.

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

if ($line['Дата начала полномочий']!= "0000-00-00 00:00:00") {
$line['Срок полномочий'] = date("Y-m-d H:i:s", strtotime($line['Дата начала полномочий'])+2*365);
}
else {
$line['Срок полномочий']="0000-00-00 00:00:00" ;
}

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

Сообщение отредактировал Александр Пономарев: 12 Март 2015 - 16:17


#35 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 12 Март 2015 - 17:05

if ($line['Дата начала полномочий']!= "0000-00-00 00:00:00") {
$line['Срок полномочий'] = date("Y-m-d H:i:s", strtotime($line['Дата начала полномочий'])+60*60*24*365*2);
}
else {
$line['Срок полномочий']="0000-00-00 00:00:00" ;
}
Рабочий код

#36 Dmitry506

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

  • Пользователи
  • PipPipPip
  • 30 сообщений
  • Пол:Мужчина
  • Город:Орел

Отправлено 15 Апрель 2015 - 10:43

Добрый день.
Подскажите как выдернуть из даты только время и передать его в другую таблицу.

#37 CbCoder

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

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

Отправлено 15 Апрель 2015 - 12:18

Поле с датой представляет из себя строку формата "2015-04-15 12:16:32". Соответственно, просто вырезаете (например функцией substr) из строки нужную часть:

$time = substr(11, $line['Дата']); // время полностью

$time = substr(11, 5, $line['Дата']); // время без секунд


#38 Dmitry506

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

  • Пользователи
  • PipPipPip
  • 30 сообщений
  • Пол:Мужчина
  • Город:Орел

Отправлено 16 Апрель 2015 - 09:31

Спасибо.

#39 easysoftware

    Участник

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

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

Цитата

$line['Возраст'] = floor((time() - strtotime($line['Дата рождения'])) / (86400*365.25));

Пробую внедрить ту же функцию, но что-то не получается. Не считает в карточке.
В поле Возраст (Число) не дает выбрать нужное вычисление "Возраст животного", хотя в списке Вычислений оно есть
Тем не менее значки php есть https://yadi.sk/i/vqTjxZPzgkXEp
Подскажите, что делаю не так?

P.S. Я только начинаю, возможно, где-то туплю )

#40 CbCoder

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

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

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

Просмотр сообщенияeasysoftware (20 Май 2015 - 12:05) писал:

В поле Возраст (Число) не дает выбрать нужное вычисление "Возраст животного", хотя в списке Вычислений оно есть

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





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

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