/************************************************************************ AUTHOR: Speedy Mercer WEBSITE: http://www.herohog.com E-MAIL: code AT herohog.com LEGAL: This program is provided for FREE. All I ask is that you give credit where credit is due if you use it. There is NO warranty either written or implied. DATE: 8/17/2004 TAKES: Time as a character string in the format "HH:MM AM" OR "HH:MM" OR "HH" where: 0 <= HH <= 23 and: 0 <= MM <= 59 and: AM = "AM" OR "A" OR "PM" OR "P" OR "" RETURNS: Time in seconds since midnight NOTES: Returns -1 if there is an error in the input *************************************************************************/ FUNCTION TimeToSec RETURNS INTEGER (INPUT ipcTime AS CHARACTER). DEF VAR viHour AS INT NO-UNDO. DEF VAR vcMode AS CHAR NO-UNDO. /* Check for improper time format */ IF (LENGTH(ipcTime) > 8 AND INDEX(ipcTime, ":") > 0) OR (LENGTH(ipcTime) < 4 AND INDEX(ipcTime, ":") > 0) OR (LENGTH(ipcTime) > 2 AND INDEX(ipcTime, ":") = 0) OR (INDEX(ipcTime, ":") = 0 AND INTEGER(ipcTime) > 23) OR (INDEX(ipcTime, ":") <> 0 AND (INTEGER(ENTRY(1, ipcTime, ":")) > 23 OR INTEGER(ENTRY(1, ipcTime, ":")) < 0 OR INTEGER(ENTRY(2, TRIM(ipcTime, " APM"), ":")) > 59 OR INTEGER(ENTRY(2, TRIM(ipcTime, " APM"), ":")) < 0 OR (INTEGER(ENTRY(1, ipcTime, ":")) > 12 AND (INDEX(ipcTime, "A") <> 0 OR INDEX(ipcTime, "P") <> 0)))) THEN RETURN -1. ELSE DO: IF INDEX(ipcTime, ":") = 0 THEN RETURN INTEGER(ipcTime) * 60 * 60. IF INDEX(ipcTime, "A") <> 0 THEN ASSIGN vcMode = "AM". ELSE IF INDEX(ipcTime, "P") <> 0 THEN ASSIGN vcMode = "PM". ELSE ASSIGN vcMode = "MILITARY". ASSIGN ipcTime = TRIM(ipcTime, " APM"). CASE vcMode: WHEN "AM" THEN IF INT(entry(1,ipcTime,":")) = 12 THEN viHour = 0. ELSE viHour = INT(ENTRY(1,ipcTime,":")). WHEN "PM" THEN IF INT(entry(1,ipcTime,":")) = 12 THEN viHour = 12. ELSE viHour = INT(ENTRY(1,ipcTime,":")) + 12. WHEN "MILITARY" THEN viHour = INT(ENTRY(1,ipcTime,":")). END CASE. /* vcMode */ RETURN (viHour * 60 + INT(ENTRY(2,ipcTime,":"))) * 60. END. END PROCEDURE. /* TimeToSec */