Forum Discussion

LauraDiak's avatar
LauraDiak
Qrew Member
4 years ago

Calculate Years of Employee between a date/time field and today

I am trying to develop a field that automatically calculates the years of employment (including months & days) using a date/time field (Date of Hire) and whatever day it is currently.  

Thank you in advance!

------------------------------
Laura Diak
------------------------------

7 Replies

  • DonLarson's avatar
    DonLarson
    Qrew Commander
    Laura,

    This is a two part projcet.

    You need a Formula Duration field.   

    • Today()-[Date of Hire]

    That gives you your first answer and can be used in reporting for seniority, total employment time and so on.

    Then you need a Formula Text field to convert the Duration to each component of Years, Months and Days.  This you will want to put on Forms and specialty reports where no further calculations are to be performed on the data.


    ------------------------------
    Don Larson
    Paasporter
    Westlake OH
    ------------------------------
    • LauraDiak's avatar
      LauraDiak
      Qrew Member
      Thank you, Don.

      I was able to get the first part working.  How would you suggest I set up the formula for the second part?

      ------------------------------
      Laura Diak
      ------------------------------
      • DonLarson's avatar
        DonLarson
        Qrew Commander
        Laura,

        You need two tools, conversions and whole set of QB Formulas called Rounding and Truncating


        You can use these to break up the Duration into smaller pieces that can then be displayed as Years, Months and Days.  However we should make two assumptions

        • All years are 365 days long
        • All months are 31 days long
        This is not really true because of leap years and even and odd months.  If you cannot live with these assumptions then this gets much more complicated.

        The easiest part is how many total days someone has been there.

        • ToDays([Duration])
        That gives you a number which can be from zero to really big.  Once this goes over 31 then you have your first month.
        When Total Days goes over 365 we have our first year.  I would do this going backwards from year to month to day

        var number TotalNumDays = ToDays([Duration]);
        var number TotalNumYears = $TotalNumDays/365; // Quick Base does not have a function ToYears() which is a bummer, so we made one

        //Calculate Years to Display
        var number DisplayYears = (Floor($TotalNumYears));  

        //Calculate Months to Display
        var number DisplayMonths= Floor(($TotalNumYears-$DisplayYears)*12);

        // Calculate Days to Display
        var number DisplayDays= $TotalNumDays-$DisplayYears*365 - $DisplayMonths*31;


        //Display
        ToText($DisplayYears) & " Years " & "<br>" & ToText($DisplayMonths) & " Months" & "<br>" & ToText($DisplayDays) & " Days"


        Play with it and you will get some text output.

        ------------------------------
        Don Larson
        Paasporter
        Westlake OH
        ------------------------------
  • Unfortunately, there isn't a numeric field type that would produce Years, Months, and Days. You would probably need to either do 3 individual numeric formulas OR a single Text formula.


    ------------------------------
    Blake Harrison
    bharrison@datablender.io
    DataBlender - Quick Base Solution Provider
    Atlanta GA
    404.800.1702 / http://datablender.io/
    ------------------------------
    • MarkShnier__You's avatar
      MarkShnier__You
      Qrew Champion
      This formula will do years and months. But I or someone would need to get inspired to get the days working too.

      var date MyDate = [My date];
      var text Years = ToText(

      Year(Today())-Year($MyDate)
      -
      If(
      Month(Today())<Month($MyDate)
      or
      (Month(Today())=Month($MyDate) and Day(Today())<Day($MyDate)),1,0));

      var text Months =  If(
      Month(Today()) > Month($MyDate), ToText(Month(Today()) - Month($mydate)),
      Month(Today()) = Month($MyDate) and Day(Today()) > Day($Mydate), ToText(Month(Today()) - Month($mydate)),
      Month(Today()) = Month($MyDate) and Day(Today()) < Day($Mydate), "11",

      ToText(12-(Month($mydate) - Month(Today()))));

      var text RawResult=
      $Years & "yr" & If ($years <> "1","s") & " " &   $Months & "mth" & If($Months<>"1","s");

      If($years<>"" and $Months<>"", $RawResult)

      ------------------------------
      Mark Shnier (YQC)
      Quick Base Solution Provider
      Your Quick Base Coach
      http://QuickBaseCoach.com
      mark.shnier@gmail.com
      ------------------------------
      • LauraDiak's avatar
        LauraDiak
        Qrew Member
        Thank you.

        ------------------------------
        Laura Diak
        ------------------------------