From 9e5770f13155b6c762bb0f7ff4c8cce1366b24c4 Mon Sep 17 00:00:00 2001 From: John Mizerek Date: Fri, 20 Feb 2026 11:56:31 -0800 Subject: [PATCH] Add toISO8601() helper for UTC date formatting --- api/Application.cfm | 8 ++++++++ api/chat/getMessages.cfm | 2 +- api/orders/checkStatusUpdate.cfm | 2 +- api/tasks/getDetails.cfm | 4 ++-- api/tasks/listMine.cfm | 6 +++--- api/tasks/listPending.cfm | 2 +- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/api/Application.cfm b/api/Application.cfm index e1c75a5..2ae7d83 100644 --- a/api/Application.cfm +++ b/api/Application.cfm @@ -76,6 +76,14 @@ function headerValue(name) { return ""; } +// Format date as ISO 8601 with UTC timezone (e.g., "2024-01-15T20:30:00Z") +// This allows clients to parse without assuming a timezone +function toISO8601(d) { + if (isNull(d) || !isDate(d)) return ""; + var utc = dateConvert("local2utc", d); + return dateTimeFormat(utc, "yyyy-MM-dd'T'HH:nn:ss") & "Z"; +} + // Determine request path request._api_scriptName = ""; if (structKeyExists(cgi, "SCRIPT_NAME")) { diff --git a/api/chat/getMessages.cfm b/api/chat/getMessages.cfm index 28b9c3b..921fef4 100644 --- a/api/chat/getMessages.cfm +++ b/api/chat/getMessages.cfm @@ -82,7 +82,7 @@ try { "SenderName": len(trim(msg.SenderName)) ? msg.SenderName : (msg.SenderType == "customer" ? "Customer" : "Staff"), "Text": msg.MessageBody, "IsRead": msg.IsRead == 1, - "CreatedOn": dateFormat(msg.CreatedOn, "yyyy-mm-dd") & "T" & timeFormat(msg.CreatedOn, "HH:mm:ss") + "CreatedOn": toISO8601(msg.CreatedOn) }); } diff --git a/api/orders/checkStatusUpdate.cfm b/api/orders/checkStatusUpdate.cfm index cac62ec..52ca1c2 100644 --- a/api/orders/checkStatusUpdate.cfm +++ b/api/orders/checkStatusUpdate.cfm @@ -88,7 +88,7 @@ "StatusID": currentStatus, "StatusName": statusName, "Message": statusMessage, - "LastEditedOn": dateFormat(qOrder.LastEditedOn, "yyyy-mm-dd") & " " & timeFormat(qOrder.LastEditedOn, "HH:mm:ss") + "LastEditedOn": toISO8601(qOrder.LastEditedOn) }> diff --git a/api/tasks/getDetails.cfm b/api/tasks/getDetails.cfm index c991105..2ae687b 100644 --- a/api/tasks/getDetails.cfm +++ b/api/tasks/getDetails.cfm @@ -109,11 +109,11 @@ "TaskTypeName": qTask.TaskTypeName ?: "", "TaskTypeColor": len(trim(qTask.TaskTypeColor)) ? qTask.TaskTypeColor : "##9C27B0", "TaskTitle": taskTitle, - "TaskCreatedOn": dateFormat(qTask.CreatedOn, "yyyy-mm-dd") & "T" & timeFormat(qTask.CreatedOn, "HH:mm:ss"), + "TaskCreatedOn": toISO8601(qTask.CreatedOn), "TaskStatusID": qTask.ClaimedByUserID GT 0 ? 1 : 0, "OrderID": qTask.OrderID ?: 0, "OrderRemarks": qTask.Remarks ?: "", - "OrderSubmittedOn": isDate(qTask.SubmittedOn) ? (dateFormat(qTask.SubmittedOn, "yyyy-mm-dd") & "T" & timeFormat(qTask.SubmittedOn, "HH:mm:ss")) : "", + "OrderSubmittedOn": toISO8601(qTask.SubmittedOn), "OrderTotal": 0, "OrderTotalCents": 0, "ServicePointID": qTask.ServicePointID ?: 0, diff --git a/api/tasks/listMine.cfm b/api/tasks/listMine.cfm index fdfc669..45bf7e0 100644 --- a/api/tasks/listMine.cfm +++ b/api/tasks/listMine.cfm @@ -128,9 +128,9 @@ "TaskTypeID": qTasks.TaskTypeID, "Title": taskTitle, "Details": taskDetails, - "CreatedOn": dateFormat(qTasks.CreatedOn, "yyyy-mm-dd") & "T" & timeFormat(qTasks.CreatedOn, "HH:mm:ss"), - "ClaimedOn": (isNull(qTasks.ClaimedOn) OR len(trim(qTasks.ClaimedOn)) EQ 0) ? "" : dateFormat(qTasks.ClaimedOn, "yyyy-mm-dd") & "T" & timeFormat(qTasks.ClaimedOn, "HH:mm:ss"), - "CompletedOn": (isNull(qTasks.CompletedOn) OR len(trim(qTasks.CompletedOn)) EQ 0) ? "" : dateFormat(qTasks.CompletedOn, "yyyy-mm-dd") & "T" & timeFormat(qTasks.CompletedOn, "HH:mm:ss"), + "CreatedOn": toISO8601(qTasks.CreatedOn), + "ClaimedOn": toISO8601(qTasks.ClaimedOn), + "CompletedOn": toISO8601(qTasks.CompletedOn), "StatusID": (isNull(qTasks.CompletedOn) OR len(trim(qTasks.CompletedOn)) EQ 0) ? 1 : 3, "SourceType": "order", "SourceID": qTasks.OrderID, diff --git a/api/tasks/listPending.cfm b/api/tasks/listPending.cfm index 0f96983..194d616 100644 --- a/api/tasks/listPending.cfm +++ b/api/tasks/listPending.cfm @@ -110,7 +110,7 @@ "TaskTypeID": qTasks.TaskTypeID, "Title": taskTitle, "Details": taskDetails, - "CreatedOn": dateFormat(qTasks.CreatedOn, "yyyy-mm-dd") & "T" & timeFormat(qTasks.CreatedOn, "HH:mm:ss"), + "CreatedOn": toISO8601(qTasks.CreatedOn), "StatusID": qTasks.ClaimedByUserID GT 0 ? 1 : 0, "SourceType": "order", "SourceID": qTasks.OrderID,