MARX#88963 Betere ondersteuning XMLtoJsDate voor datums met milliseconden én tijdzones

svn path=/Website/trunk/; revision=71141
This commit is contained in:
Jos Groot Lipman
2025-12-03 16:33:26 +00:00
parent 371daa147c
commit a6d4e9ad91
2 changed files with 70 additions and 12 deletions

View File

@@ -0,0 +1,40 @@
<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: date_tester.asp
Description: Script om datumconversies te testen
Parameters:
Context: Handmatig, bijvoorbeeld met http://logc.facws001.sg.nl/trunk/APPL/Shared/date_tester.asp
Notes: Misschien ooit uit te breiden met de testen van z:\Project\FACILITOR\Database\trunk\_UTIL\test_datumtijdperDB23.sql
*/
DOCTYPE_Disable = 1;
ANONYMOUS_Allowed = 1;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<%
if (Application("otap_environment") != "O")
shared.simpel_page(L("lcl_no_auth"));
function testXMLtoJsDate(s)
{
var dt = XMLtoJsDate(s);
Response.Write("<tr><td>{0}</td><td>{1}</td></tr>".format(s, toDateTimeString(dt, true)));
}
__Logging = 1;
Response.Write("Testing XMLtoJsDate, all results should be the same<br><br>");
Response.Write("<table><tr><th>from XMLtoJsDate</th><th>Resulting JS Date</th></tr>");
testXMLtoJsDate("2020-10-08T21:59:59Z");
testXMLtoJsDate("2020-10-08T21:59:59.123Z");
testXMLtoJsDate("2020-10-08T23:59:59");
testXMLtoJsDate("2020-10-08T23:59:59.123");
testXMLtoJsDate("2020-10-08T23:59:59+02:00");
testXMLtoJsDate("2020-10-08T23:59:59.123+02:00");
Response.Write("</table>");
ASPPAGE_END();
%>

View File

@@ -508,22 +508,38 @@ function xmlToJson(xml)
// Luie oplossing: Oracle kan dit simpeler dan JavaScript.
// Naamgeving is overigens misleidend: we gebruiken het meestal met data vanuit
// een XML maar eigenlijk is de bron een ISO8601 formaat datum
/* We ondersteunen de volgende formaten die allemaal hetzelfde eindresultaat geven:
2020-10-08T21:59:59Z
2020-10-08T21:59:59.123Z
2020-10-08T23:59:59
2020-10-08T23:59:59.123
2020-10-08T23:59:59+02:00
2020-10-08T23:59:59.123+02:00
Te testen met http://logc.facws001.sg.nl/trunk/APPL/Shared/date_tester.asp
*/
function XMLtoJsDate(xmlDate)
{
var orgxmlDate = xmlDate; // voor logging
xmlDate = xmlDate.replace(/^\s+|\s+$/g,""); // trim spaties
if (xmlDate.length >= 20) // with offset
var offset = null;
if (xmlDate.slice(-1) == 'Z') // 2020-10-08T21:59:59Z
{
var offset = "+00:00";
xmlDate = xmlDate.slice(0, -1);
}
else if (xmlDate.slice(-6, -5) == '+' || xmlDate.slice(-6, -5) == '-' ) // 2020-10-08T23:59:59+02:00
{
var offset = xmlDate.slice(-6);
xmlDate = xmlDate.slice(0, -6);
}
if (xmlDate.indexOf('.') != -1) // Verwijder milliseconden
{
xmlDate = xmlDate.split('.')[0];
}
if (offset)
{
if (xmlDate.slice(-1) == 'Z') // 2020-10-08T21:59:59Z
{
var offset = "+00:00";
xmlDate = xmlDate.slice(0, -1);
}
else // 2020-10-08T23:59:59+02:00
{
var offset = xmlDate.slice(-6);
xmlDate = xmlDate.slice(0, -6);
}
var sql = "SELECT CAST ( "
+ " FROM_TZ ( "
+ " CAST ( "
@@ -535,8 +551,10 @@ function XMLtoJsDate(xmlDate)
+ " FROM DUAL";
}
else
{
var sql = "SELECT TO_DATE(REPLACE("+safe.quoted_sql(xmlDate)+",'T',' '), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL";
//var sql = "SELECT TO_CHAR (TRUNC (TO_DATE(REPLACE("+safe.quoted_sql(xmlDate)+",'T',' '), 'YYYY-MM-DD HH24:MI:SS'), 'HH') + (15 * ROUND (TO_CHAR (TRUNC (TO_DATE(REPLACE("+safe.quoted_sql(xmlDate)+",'T',' '), 'YYYY-MM-DD HH24:MI:SS'), 'MI'), 'MI') / 15)) / 1440, 'DD-MM-YYYY HH24:MI:SS') FROM DUAL";
}
try {
var oRs = Oracle.Execute(sql);
var dt = new Date(oRs(0).Value);