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

S

Srikanth Jeeva

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
 
B

Brian Candler

Srikanth said:
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.
 
S

Srikanth Jeeva

Brian said:
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.
 
P

Pascal J. Bourguignon

Srikanth Jeeva said:
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
 
P

Pascal J. Bourguignon

Srikanth Jeeva said:
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
 
D

dusty

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.

You could try this beauty of a gem.

http://runt.rubyforge.org/

http://runt.rubyforge.org/doc/files/doc/tutorial_te_rdoc.html
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top