Hi All.
This thing drives me nuts. Maybe because it's a Monday, or because I work with Crystal about once a year.
Here's an issue. I have start/end date fields. Need to get DateDiff for day, hour, munites for further calculations (Count/Sum). Formula I have gives me correct output for some records (when time is on the same day) and bad for others (when hours span overnight).
So, for example StartDateTime="1/10/2007 8:33:10PM" and EndDateTime="1/11/2007 4:33:00AM" gives me "00 Days,-16 Hours,00 Minutes". Should be just 8 Hours. Any ideas what I'm doing wrong? Thanks
Code:
[blue]if[/blue] {usp_RPT_RW_CONDS_TIME;1.TIRE_CHAIN_RSTRCT_DESC} [blue]like[/blue] "Condition A*" [blue]then[/blue]
[blue]NumberVar[/blue] DaysDiff := [blue]DateDiff[/blue]("d",{usp_RPT_RW_CONDS_TIME;1.ENTRY_DTTM},{usp_RPT_RW_CONDS_TIME;1.EXP_DTTM});
[blue]NumberVar[/blue] HourStart := [blue]Hour[/blue]({usp_RPT_RW_CONDS_TIME;1.ENTRY_DTTM});
[blue]NumberVar[/blue] MinStart := [blue]Minute[/blue]({usp_RPT_RW_CONDS_TIME;1.ENTRY_DTTM});
[blue]NumberVar[/blue] HourEnd := [blue]Hour[/blue]({usp_RPT_RW_CONDS_TIME;1.EXP_DTTM});
[blue]NumberVar[/blue] MinEnd := [blue]Minute[/blue]({usp_RPT_RW_CONDS_TIME;1.EXP_DTTM});
[blue]NumberVar[/blue] HourDiff:= 0;
[blue]NumberVar[/blue] MinDiff := 0;
[COLOR=green]// get days and hours[/color green]
[blue]If[/blue] DaysDiff >= 1 [blue]then[/blue]
(
[blue]If[/blue] HourStart > HourEnd [blue]Then[/blue]
(
HourDiff := (HourEnd - HourStart) + 24;//adjust number of hours
DaysDiff := DaysDiff - 1;[COLOR=green]//adjust the number of days[/color green]
)
[blue]else[/blue]
HourDiff := HourEnd - HourStart;
)
[blue]else[/blue]
HourDiff := HourEnd-HourStart;
/[COLOR=green]/get minutes[/color green]
[blue]If[/blue] HourDiff >= 1 [blue]then[/blue]
(
[blue]If[/blue] MinStart > MinEnd [blue]Then[/blue]
(
MinDiff := 60 + (MinEnd - MinStart);[COLOR=green]//adjust minute[/color green]
(HourDiff := HourDiff - 1)[COLOR=green]//adjust hour[/color green]
)
[blue]else[/blue]
MinDiff := MinEnd - MinStart
)
[blue]else[/blue]
MinDiff := MinEnd - MinStart;
[COLOR=green]// output[/color green]
[blue]Totext[/blue](DaysDiff,"00") + " Days," + [blue]Totext[/blue](HourDiff,"00") + " Hours," +
[blue]ToText[/blue](MinDiff,"00") + " Minutes";