Announcement

Collapse
No announcement yet.

Рассчитать в соседнем поле количество полных лет

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Рассчитать в соседнем поле количество полных лет

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

  • #2
    В хелпе написано: datetime\diff
    datetime\diff(VALUE_1, VALUE_2, INTERVAL_TYPE) Returns difference between two dates or datetimes. INTERVAL_TYPE can be 'years', 'months', 'days', 'hours', 'minutes'. Returns null if failure. Result will be negative if VALUE_1 < VALUE_2.


    имя_поля_кол-во_лет = datetime\diff(datetime\today(), имя_поля_с_др, 'years');

    Comment


    • #3
      Здравствуйте.
      Тут в украинской ветке форума этот вопрос поднимался https://forum.espocrm.com/forum/inte...B0%D0%BA%D1%82. Я надеюсь что с переводом проблем не будет. Там как раз описан процесс высчета полных лет. Просмотрите топик до конца так как там вносились изменения в формулу что бы она корректно высчитывала возраст.

      Comment


      • #4

        Comment


        • #5
          ifThenElse(
          datetime\month(datetime\today()) >= datetime\month(dateofbirthday) &&
          datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
          age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)),
          age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)) - 1
          );

          ifThenElse(
          datetime\month(datetime\today()) == datetime\month(dateofbirthday),
          ifThenElse(
          datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
          month = 0,
          month = 12
          ),
          ifThenElse(
          (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) < 0,
          month = (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) + 12,
          month = 0 + (datetime\month(datetime\today()) - datetime\month(dateofbirthday))
          )
          );

          Подскажите пожалуйста а что из них название полей?

          Comment


          • #6
            'dateofbirthday' = дата дня рождения
            'age' = возраст
            'month' = количество месяцев

            Comment


            • #7
              По какой-то причине, я вбил свою дату 30.04.1988 и получил в соседнем поле 30 лет, но мне то 31. Где-то есть проблема. Использовал полностью код выше.

              Comment


              • #8
                Можете предоставить вашу формулу. Я взгляну.
                Спасибо.

                Comment


                • #9
                  ifThenElse(
                  datetime\month(datetime\today()) >= datetime\month(dateofbirthday) &&
                  datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                  age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)),
                  age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)) - 1
                  );

                  ifThenElse(
                  datetime\month(datetime\today()) == datetime\month(dateofbirthday),
                  ifThenElse(
                  datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                  month = 0,
                  month = 12
                  ),
                  ifThenElse(
                  (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) < 0,
                  month = (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) + 12,
                  month = 0 + (datetime\month(datetime\today()) - datetime\month(dateofbirthday))
                  )
                  );

                  Comment


                  • #10
                    Замените первый блок ifThenElse на
                    Code:
                    ifThenElse(
                        datetime\month(datetime\today()) > datetime\month(birthday) || 
                        datetime\month(datetime\today()) = datetime\month(birthday) &&
                        datetime\date(datetime\today()) >= datetime\date(birthday),
                        age = (datetime\year(datetime\today()) - datetime\year(birthday)),
                        age = (datetime\year(datetime\today()) - datetime\year(birthday)) - 1
                    );

                    Comment


                    • #11
                      Теперь в поле "Возраст" отображается "2018"

                      Comment


                      • #12
                        хотя дата стоит 30.04.1988

                        Comment


                        • #13
                          Просто у меня дата рождения записана в поле 'birthday', а не 'dateofbirthday'. Замените мое значение на свое.

                          Comment


                          • #14
                            Всё равно на дату 30.04.1988 показывает 30 лет. Должно быть 31

                            ifThenElse(
                            datetime\month(datetime\today()) > datetime\month(dateofbirthday) ||
                            datetime\month(datetime\today()) = datetime\month(dateofbirthday) &&
                            datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                            age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)),
                            age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)) - 1
                            );

                            ifThenElse(
                            datetime\month(datetime\today()) == datetime\month(dateofbirthday),
                            ifThenElse(
                            datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                            month = 0,
                            month = 12
                            ),
                            ifThenElse(
                            (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) < 0,
                            month = (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) + 12,
                            month = 0 + (datetime\month(datetime\today()) - datetime\month(dateofbirthday))
                            )
                            );
                            ifThenElse(
                            datetime\month(datetime\today()) > datetime\month(dateofbirthday) ||
                            datetime\month(datetime\today()) = datetime\month(dateofbirthday) &&
                            datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                            age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)),
                            age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)) - 1
                            );

                            ifThenElse(
                            datetime\month(datetime\today()) == datetime\month(dateofbirthday),
                            ifThenElse(
                            datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                            month = 0,
                            month = 12
                            ),
                            ifThenElse(
                            (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) < 0,
                            month = (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) + 12,
                            month = 0 + (datetime\month(datetime\today()) - datetime\month(dateofbirthday))
                            )
                            );

                            Comment


                            • #15
                              Хах. Действительно проблемка. После последнего исправления я тестировал только в рамках одного месяца и проблема не была мною замечена. Я подправил. Теперь ,блок по расчету возраста выглядит так:
                              Code:
                              age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday)) - 1;
                              
                              ifThen(
                                  datetime\month(datetime\today()) > datetime\month(dateofbirthday),
                                  age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday))
                              );
                              
                              ifThen(
                                  datetime\month(datetime\today()) = datetime\month(dateofbirthday) && 
                                  datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                                  age = (datetime\year(datetime\today()) - datetime\year(dateofbirthday))
                              );
                              Если у вас нет цели отображать количество месяцев то вы можете не использовать следующий кусок кода в формуле:
                              Code:
                              ifThenElse(
                              datetime\month(datetime\today()) == datetime\month(dateofbirthday),
                              ifThenElse(
                              datetime\date(datetime\today()) >= datetime\date(dateofbirthday),
                              month = 0,
                              month = 12
                              ),
                              ifThenElse(
                              (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) < 0,
                              month = (datetime\month(datetime\today()) - datetime\month(dateofbirthday)) + 12,
                              month = 0 + (datetime\month(datetime\today()) - datetime\month(dateofbirthday))
                              )
                              );
                              Если обнаружите чтото еще, пишите. Постараюсь помочь.

                              Comment

                              Working...
                              X