want only the working hours(9am-5pm) between two dates

Discussion in 'Ruby' started by Srikanth Jeeva, Dec 10, 2008.

  1. want only the working hours(9am-5pm) between two dates, weekends should
    be omitted..

    i did this code..

    require 'time'
    require 'date'
    class Date
    def calc(date1,date2)

    d1=Time.parse(date1).strftime('%d').to_i
    m1=Time.parse(date1).strftime('%m').to_i
    y1=Time.parse(date1).strftime('%Y').to_i
    t1=Time.parse(date1).strftime('%H').to_i
    min1=Time.parse(date1).strftime('%M').to_i

    date1 = Date.new( y1, m1, d1 )

    d2=Time.parse(date2).strftime('%d').to_i
    m2=Time.parse(date2).strftime('%m').to_i
    y2=Time.parse(date2).strftime('%Y').to_i
    t2=Time.parse(date2).strftime('%H').to_i

    date2 = Date.new( y2, m2, d2 )
    weekdays = (date1..date2).reject { |d| [0,6].include? d.wday }
    w= weekdays.length
    working_hours=w*8
    puts "working hours = #{working_hours}"

    end
    end

    d=Date.new
    d.calc("November 5th, 2008, 10:30 am","November 7th, 2008, 6:00 pm")

    i have calculated the total working hours..
    but i need the total hours between 9am-5pm, between the given dates..
    can any one plz help??
    thanks.,

    Regards,
    Srikanth J
    --
    Posted via http://www.ruby-forum.com/.
     
    Srikanth Jeeva, Dec 10, 2008
    #1
    1. Advertising

  2. Srikanth Jeeva wrote:
    > but i need the total hours between 9am-5pm, between the given dates..
    > can any one plz help??


    Not sure what you mean. Do you mean (date2 - date1 + 1) * 8 ?

    Use to_i on the answer if you don't want Rational arithmetic.
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Dec 10, 2008
    #2
    1. Advertising

  3. Brian Candler wrote:
    > Srikanth Jeeva wrote:
    >> but i need the total hours between 9am-5pm, between the given dates..
    >> can any one plz help??

    >
    > Not sure what you mean. Do you mean (date2 - date1 + 1) * 8 ?
    >
    > Use to_i on the answer if you don't want Rational arithmetic.


    hi brain,

    i mean..

    date1="November 5th, 2008, 10:30 am"
    date2="November 7th, 2008, 6:00 pm"

    i want only the working hours between 10:30 am to 6.00 pm,in these
    dates...

    date can also be,

    date1="March 5th, 2005, 5:30 am"
    date2="November 7th, 2006, 9:00 pm"

    all i need is working hours between these dates...

    first day & last days time makes complications here.
    --
    Posted via http://www.ruby-forum.com/.
     
    Srikanth Jeeva, Dec 10, 2008
    #3
  4. Srikanth Jeeva <> writes:

    > want only the working hours(9am-5pm) between two dates, weekends should
    > be omitted..
    >
    > i did this code..
    > but i need the total hours between 9am-5pm, between the given dates..
    > can any one plz help??


    There's 8 hours between 9am-5pm, so 8 hour/working day.
    There's 5 working day/week.

    So if you can compute the number of weeks between the Monday following
    the first date, and the Monday preceding the last date, you can easily
    compute the number of working hours.

    if week-of(start) = week-of(end) then
    working-hours = working-hours/working-day * working-days(from start to end)
    else
    working-hours = working-hours/working-day * ( working-days(from start to end-of-week-after(start))
    + working-days(from beginning-of-week-before(end) to end)
    + working-days/working-weeks * working-weeks(from end-of-week-after(start)
    to beginning-of-week-before(end)))
    end


    --
    __Pascal Bourguignon__
     
    Pascal J. Bourguignon, Dec 10, 2008
    #4
  5. Srikanth Jeeva <> writes:

    > Brian Candler wrote:
    >> Srikanth Jeeva wrote:
    >>> but i need the total hours between 9am-5pm, between the given dates..
    >>> can any one plz help??

    >>
    >> Not sure what you mean. Do you mean (date2 - date1 + 1) * 8 ?
    >>
    >> Use to_i on the answer if you don't want Rational arithmetic.

    >
    > hi brain,
    >
    > i mean..
    >
    > date1="November 5th, 2008, 10:30 am"
    > date2="November 7th, 2008, 6:00 pm"
    >
    > i want only the working hours between 10:30 am to 6.00 pm,in these
    > dates...
    >
    > date can also be,
    >
    > date1="March 5th, 2005, 5:30 am"
    > date2="November 7th, 2006, 9:00 pm"
    >
    > all i need is working hours between these dates...
    >
    > first day & last days time makes complications here.


    If you have partial days, apply the same principle than in my previous
    answer, trim off the partial days, compute the trimmed off hours, and
    multiply the days by the working-hours-per-day.

    if day(start)=day(end) then
    min(5pm,hour(end)) - max(9am,hour(start))
    else
    (min(5pm,hour(end)) - 9am)
    + (5pm - max(9am,hour(start)))
    + previous algo with (start + 1day) and (end - 1 day)
    end

    --
    __Pascal Bourguignon__
     
    Pascal J. Bourguignon, Dec 10, 2008
    #5
  6. Srikanth Jeeva

    dusty Guest

    On Dec 10, 8:32 am, Srikanth Jeeva <> wrote:
    > Brian Candler wrote:
    > > Srikanth Jeeva wrote:
    > >> but i need the total hours between 9am-5pm, between the given dates..
    > >> can any one plz help??

    >
    > > Not sure what you mean. Do you mean (date2 - date1 + 1) * 8 ?

    >
    > > Use to_i on the answer if you don't want Rational arithmetic.

    >
    > hi brain,
    >
    > i mean..
    >
    > date1="November 5th, 2008, 10:30 am"
    > date2="November 7th, 2008, 6:00 pm"
    >
    > i want only the working hours between 10:30 am to 6.00 pm,in these
    > dates...
    >
    > date can also be,
    >
    > date1="March 5th, 2005, 5:30 am"
    > date2="November 7th, 2006, 9:00 pm"
    >
    > all i need is working hours between these dates...
    >
    > first day & last days time makes complications here.
    > --
    > Posted viahttp://www.ruby-forum.com/.


    You could try this beauty of a gem.

    http://runt.rubyforge.org/

    http://runt.rubyforge.org/doc/files/doc/tutorial_te_rdoc.html
     
    dusty, Dec 10, 2008
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. David Lozzi

    Dates dates dates dates... SQL and ASP.NET

    David Lozzi, Sep 29, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    896
    Rob Schieber
    Sep 30, 2005
  2. Rahmi Acar
    Replies:
    0
    Views:
    573
    Rahmi Acar
    Jul 17, 2003
  3. Steven Scaife

    working out time passed between two dates

    Steven Scaife, Jul 21, 2004, in forum: ASP General
    Replies:
    3
    Views:
    147
    Aaron [SQL Server MVP]
    Jul 21, 2004
  4. PW

    Dates! Dates! Dates!

    PW, Aug 7, 2004, in forum: ASP General
    Replies:
    4
    Views:
    223
    Mark Schupp
    Aug 9, 2004
  5. rutherf
    Replies:
    2
    Views:
    455
    rutherf
    Oct 28, 2006
Loading...

Share This Page