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

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Sab0tajue
    Senior Member
    • Jul 2019
    • 315

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

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

    #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

    • Maximus
      Senior Member
      • Nov 2018
      • 2731

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

      Comment

      • Sab0tajue
        Senior Member
        • Jul 2019
        • 315

        #4

        Comment

        • Sab0tajue
          Senior Member
          • Jul 2019
          • 315

          #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

          • Maximus
            Senior Member
            • Nov 2018
            • 2731

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

            Comment

            • Sab0tajue
              Senior Member
              • Jul 2019
              • 315

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

              Comment

              • Maximus
                Senior Member
                • Nov 2018
                • 2731

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

                Comment

                • Sab0tajue
                  Senior Member
                  • Jul 2019
                  • 315

                  #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

                  • Maximus
                    Senior Member
                    • Nov 2018
                    • 2731

                    #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

                    • Sab0tajue
                      Senior Member
                      • Jul 2019
                      • 315

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

                      Comment

                      • Sab0tajue
                        Senior Member
                        • Jul 2019
                        • 315

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

                        Comment

                        • Maximus
                          Senior Member
                          • Nov 2018
                          • 2731

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

                          Comment

                          • Sab0tajue
                            Senior Member
                            • Jul 2019
                            • 315

                            #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

                            • Maximus
                              Senior Member
                              • Nov 2018
                              • 2731

                              #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...