This has subsequently been resolved and will not be an issue with more recent builds.
This patch code will resolve the issue for version 7.0rc2:
Code:
//---------------------------------------------------------------------------- // Isomorphic SmartClient 7.0rc2 patch // Purpose: Fixes an issue when parsing XML date-time stamps for certain // explicitly specified timezones. // // Applies to SmartClient 7.0RC2 builds only //---------------------------------------------------------------------------- if (window.isc && isc.version.startsWith("7.0rc2/")) { isc.addProperties(Date, { parseSchemaDate : function (value) { if (isc.isA.Date(value)) return value; if (!isc.isA.String(value)) value = (value.toString ? value.toString() : value + ""); // Notes on regex: // - result[4] is the optional timestamp including the T and colon separators // - result[8] would be the optional milliseconds including the ".", whereas // result[9] is just the numeric part // results[10] is the timezone - either "Z" (zulu time or GMT) or +/- HH:MM var result = value.match(/(\d{4})[\/-](\d{2})[\/-](\d{2})([T ](\d{2}):(\d{2}):(\d{2}))?(\.(\d+))?([+-]\d{2}:\d{2}|Z)?/); //isc.Log.logWarn("isDate: '" + value + "', regex match: " + result); if (result == null) return null; var dateValue; // NOTE: pass only the relevant arguments as Moz does not like being passed nulls if (!result[4]) { // no time dateValue = new Date(result[1], result[2] - 1, result[3]); } else if (!result[9]) { // no ms dateValue = new Date(Date.UTC(result[1], result[2] - 1, result[3], result[5], result[6], result[7])); } else { var ms = result[9]; // XML Schema says any number of fractional digits can be specified. new Date() is // expecting a whole number of milliseconds (and further precision would be ignored). // Multiply by a power of ten based on the number of digits provided, such that ".9" // becomes 900 and ".98367" becomes 984. if (ms.length != 3) { var multiplier = Math.pow(10,3-ms.length); ms = Math.round(parseInt(ms,10) * multiplier); } //isc.Log.logWarn("ms is: " + ms); dateValue = new Date(Date.UTC(result[1], result[2] - 1, result[3], result[5], result[6], result[7], ms)); } // Handle timezone offset from GMT if (result[10] && result[10].toLowerCase() != "z") { var HM = result[10].split(":"), H = HM[0], negative = H && H.startsWith("-"), M = HM[1]; H = parseInt(H, 10); M = parseInt(M, 10); var dateTime = dateValue.getTime(); // Note no need to account for negative on hours since the "+" or "-" prefix was picked up // in parseInt if (isc.isA.Number(H)) dateTime -= (3600000 * H); if (isc.isA.Number(M)) dateTime -= (60000 * M * (negative ? -1 : 1)); dateValue.setTime(dateTime); } return dateValue } }); } else if (window.isc) { isc.Log.logWarn("Patch code included for version 7.0rc2. You're running version:" + isc.version + " this patch code will have no effect and can be removed."); }