MARX#88963 Betere ondersteuning XMLtoJsDate voor datums met milliseconden én tijdzones
svn path=/Website/trunk/; revision=71141
This commit is contained in:
40
APPL/Shared/date_tester.asp
Normal file
40
APPL/Shared/date_tester.asp
Normal 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();
|
||||
%>
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user