Link to home
Start Free TrialLog in
Avatar of KJHDI12
KJHDI12

asked on

Date/time function

Here is the problem: I got these values:   FromDate, ToDate, DayFrom, DayTo, EveningFrom, EveningTo, NightFrom, NightTo.

FromDate and ToDate are date/time values going over multiple days. Dayfrom, dayto, eveningFrom, eveningto, nightfrom, nightto are time values defining a period of the day( Day: 08:00 - 14:59, Evening: 15:00-20:59, Night: 21:00-07:59).

I need to calculate how many minutes day, evening and night the fromdate-todate contain.

Anyone know of a function like that?

Mr. Fixit
Avatar of waty
waty
Flag of Belgium image

You have to use the DateDiff function :

ex :  nMinutes = DateDiff("n", FromDate, ToDate)
Now, you can convert those minutes for your needs.



Here is the help :

Syntax

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

The DateDiff function syntax has these named arguments:

Part      Description
interval      Required. String expression that is the interval of time you use to calculate the difference between date1 and date2.
date1, date2      Required; Variant (Date). Two dates you want to use in the calculation.
firstdayofweek      Optional. A constant that specifies the first day of the week. If not specified, Sunday is assumed.
firstweekofyear      Optional. A constant that specifies the first week of the year. If not specified, the first week is assumed to be the week in which January 1 occurs.
Settings

The interval argument has these settings:

Setting      Description
yyyy      Year
q      Quarter
m      Month
y      Day of year
d      Day
w      Weekday
ww      Week
h      Hour
n      Minute
s      Second
The firstdayofweek argument has these settings:

Constant      Value      Description
 
vbUseSystem      0      Use the NLS API setting.
vbSunday      1      Sunday (default)
vbMonday      2      Monday
vbTuesday      3      Tuesday
vbWednesday      4      Wednesday
vbThursday      5      Thursday
vbFriday      6      Friday
vbSaturday      7      Saturday
The firstweekofyear argument has these settings:

Constant      Value      Description
 
vbUseSystem      0      Use the NLS API setting.
vbFirstJan1      1      Start with week in which January 1 occurs (default).
vbFirstFourDays      2      Start with the first week that has at least four days in the new year.
vbFirstFullWeek      3      Start with first full week of the year.
Remarks

You can use the DateDiff function to determine how many specified time intervals exist between two dates. For example, you might use DateDiff to calculate the number of days between two dates, or the number of weeks between today and the end of the year.
To calculate the number of days between date1 and date2, you can use either Day of year ("y") or Day ("d"). When interval is Weekday ("w"), DateDiff returns the number of weeks between the two dates. If date1 falls on a Monday, DateDiff counts the number of Mondays until date2. It counts date2 but not date1. If interval is Week ("ww"), however, the DateDiff function returns the number of calendar weeks between the two dates. It counts the number of Sundays between date1 and date2. DateDiff counts date2 if it falls on a Sunday; but it doesn't count date1, even if it does fall on a Sunday.

If date1 refers to a later point in time than date2, the DateDiff function returns a negative number.
The firstdayofweek argument affects calculations that use the "w" and "ww" interval symbols.
If date1 or date2 is a date literal, the specified year becomes a permanent part of that date. However, if date1 or date2 is enclosed in double quotation marks (" "), and you omit the year, the current year is inserted in your code each time the date1 or date2 expression is evaluated. This makes it possible to write code that can be used in different years.

When comparing December 31 to January 1 of the immediately succeeding year, DateDiff for Year ("yyyy") returns 1 even though only a day has elapsed.
Avatar of KJHDI12
KJHDI12

ASKER


All this i know from before :>

The problem i am having is dividing the time into the 3 different timeperiods and the calculate the exact minutes in each period.

I am going to use the formula to calculate different salary in different periods of the day. Like he worked 3 days from 12.12.1998 12:00 to 14.12.1998 20:00 and you get 350 minutes at day, 333 at evening and 543 at night (These are example numbers only).

   Mr. Fixit

I think Waty's answer is good enough. The only thing that you need to do is divide the time in three parts.
1) StartTime to End of the day (Some date but different time)
2) Couple of complete days
3) Begin of the day to End date (Some date different time)

The second once is easy to calculate since these are complete days. The other ones are more difficult and should use datediff.
Replace the time with the end time of your time zone and use datediff.

Avatar of KJHDI12

ASKER

Well.. it's that last part i am having problems with..

I have no problem dividing the different days (It's only to run a for dLoop = DateValue(fromdate) to (Datevalue(ToDate))

If waty want the points he has to answer to this post again.

Mr. Fixit

you can build a class to hold the start-time and end-time and calculate inside it the times, and then have them output via properties or methods like "class.DayTime" "class.EveningTime" "class.NoonTime"
Avatar of KJHDI12

ASKER


Nice idea

Mr. Fixit
ASKER CERTIFIED SOLUTION
Avatar of waty
waty
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of KJHDI12

ASKER


 Here you go...

    Mr. Fixit