Solved

Date/time function

Posted on 1998-11-27
8
164 Views
Last Modified: 2010-04-30
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
0
Comment
Question by:KJHDI12
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 14

Expert Comment

by:waty
ID: 1447080
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.
0
 
LVL 2

Author Comment

by:KJHDI12
ID: 1447081

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

0
 
LVL 13

Expert Comment

by:Mirkwood
ID: 1447082
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.

0
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 
LVL 2

Author Comment

by:KJHDI12
ID: 1447083
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

0
 
LVL 1

Expert Comment

by:zivf
ID: 1447084
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"
0
 
LVL 2

Author Comment

by:KJHDI12
ID: 1447085

Nice idea

Mr. Fixit
0
 
LVL 14

Accepted Solution

by:
waty earned 200 total points
ID: 1447086
KJHDI12 here is my post
0
 
LVL 2

Author Comment

by:KJHDI12
ID: 1447087

 Here you go...

    Mr. Fixit
0

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…

690 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question