ASTE#37915 timezone conversies vinden nu plaats op basis van user_timezone, dit moet nog naar locatie_timezone worden omgezet

svn path=/Website/trunk/; revision=33104
This commit is contained in:
2017-03-09 16:10:00 +00:00
parent f9673019f7
commit 1e9af7db5b
3 changed files with 80 additions and 26 deletions

View File

@@ -289,9 +289,6 @@ var shared = {
}
};
var DEFAULT_TIMEZONE_OFFSET = 1; // GMT + defaultTimeZoneOffset is default if not found in db (1 = Amsterdam)
var SERVER_TIMEZONE_OFFSET = 1; // server (database) times are in GMT + serverTimeZoneOffset
// Check for parameter pName and return the value
// If not specified return defVal
// If defVal not specified pName a required parameter
@@ -445,9 +442,8 @@ function _get_ParamDate(pColl, pName, defVal)
return new Date(val);
if (defVal instanceof Date)
{
return defVal;
}
if (defVal === null) // bewust triple===
{
return null;
@@ -683,22 +679,60 @@ function transitQS()
function padout(number) { return (number < 10) ? "0" + number : number; }
function timeZoneOffset()
function toUserTimeZone(thisDate)
{
var timeZoneOffset = user.timezone_offset();
if (timeZoneOffset === null) timeZoneOffset = DEFAULT_TIMEZONE_OFFSET;
timeZoneOffset -= SERVER_TIMEZONE_OFFSET;
return timeZoneOffset * 1000 * 60 * 60;
return convertTimeZone(thisDate, "SERVER", "USER");
}
function correctedTimeZoneOffset(thisDate)
function toServerTimeZone(thisDate)
{
return new Date(thisDate.valueOf() + timeZoneOffset());
return convertTimeZone(thisDate, "USER", "SERVER");
}
function ServerTimeZonetoUTC(thisDate)
{
return convertTimeZone(thisDate, "SERVER", "UTC");
}
function convertTimeZone(thisDate, fromTZ, toTZ)
{
if (fromTZ == "" || toTZ == "" || fromTZ == toTZ)
return thisDate;
var USER = "SESSIONTIMEZONE";
var SERVER = "TO_CHAR (SYSTIMESTAMP, 'tzr')";
if (fromTZ == "USER")
fromTZ = USER;
else if (fromTZ == "SERVER")
fromTZ = SERVER;
else
fromTZ = safe.quoted_sql(fromTZ);
if (toTZ == "USER")
toTZ = USER;
else if (toTZ == "SERVER")
toTZ = SERVER;
else
toTZ = safe.quoted_sql(fromTZ);
var sql = "SELECT CAST ("
+ "FROM_TZ (CAST ( "+thisDate.toSQL(true)+" AS TIMESTAMP), "+fromTZ+")"
+ " AT TIME ZONE "+toTZ+" AS DATE)"
+ " AS newDate"
+ " FROM DUAL";
var oRs = Oracle.Execute(sql);
thisDate = new Date(oRs("newDate").value);
oRs.close();
return thisDate;
}
// This function should only be used to format display,
// <20> never as part of a computation.
function toTimeString(jsDate, bWithSeconds)
function toTimeString(jsDate, bWithSeconds, converted)
{
if (jsDate===null)
return "";
@@ -719,13 +753,14 @@ function toTimeString(jsDate, bWithSeconds)
if (!jsDate)
return "";
jsDate = correctedTimeZoneOffset(jsDate);
if (!converted)
jsDate = toUserTimeZone(jsDate);
ret = padout(jsDate.getHours()) + ":" + padout(jsDate.getMinutes());
if (bWithSeconds) ret += ":" + padout(jsDate.getSeconds());
return ret;
}
function toDateString(jsDate, noDay, pretty)
function toDateString(jsDate, noDay, pretty, converted)
{
var resstr = "";
var today = new Date().midnight();
@@ -746,7 +781,8 @@ function toDateString(jsDate, noDay, pretty)
if (!jsDate)
return "";
jsDate = correctedTimeZoneOffset(jsDate);
if (!converted)
jsDate = toUserTimeZone(jsDate);
// Ik wil graag, alleen als parameter friendly?, voor de datums gisteren, vandaag en morgen de tekst Gisteren, Vandaag en Morgen opleveren
// Voor lijsten/sortering is dat vaak niet handig, maar soms is het veel begrijpelijker. Als de mogelijkheid er is, kunnen we
@@ -775,7 +811,9 @@ function toDateTimeString(jsDate, bWithSeconds, noDay, prettyday)
if (typeof jsDate == "date") // een oRs("datum").value
jsDate = new Date(jsDate);
return toDateString(jsDate, noDay, prettyday) + " " + toTimeString(jsDate, bWithSeconds)
jsDate = toUserTimeZone(jsDate);
return toDateString(jsDate, noDay, prettyday, true) + " " + toTimeString(jsDate, bWithSeconds, true)
}
// Zie document"z:\Project\Sm44\DOC\Intern\Facilitor5i\Facilitor 5i Quotes en Escape.doc"
@@ -1350,21 +1388,21 @@ Date.prototype.toSQL = function toSQL(withTime)
Date.prototype.beginToSQL = function beginToSQL()
{
var theDateStart = correctedTimeZoneOffset(this);
var theDateStart = new Date(this);
theDateStart.setHours(0, 0);
return theDateStart.toSQL(true);
return toServerTimeZone(theDateStart, true).toSQL(true);
}
Date.prototype.endToSQL = function endToSQL()
{
var theDateEnd = correctedTimeZoneOffset(this);
var theDateEnd = new Date(this);
theDateEnd.setHours(23, 59);
return theDateEnd.toSQL(true);
return toServerTimeZone(theDateEnd, true).toSQL(true);
}
Date.prototype.midnight = function midnight()
{
var midn = correctedTimeZoneOffset(this);
var midn = new Date(this);
midn.setHours(0,0,0,0);
return midn;
}

View File

@@ -70,7 +70,7 @@ Perslid.prototype._require_prs_perslid = function __require_prs_perslid()
+ " , prs_perslid_wachtwoord_exp"
+ " , prs_perslid_apikey"
+ " , prs_perslid_terms_version"
+ " , prs_perslid_timezone_offset"
+ " , prs_perslid_timezone"
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = " + this._prs_perslid_key
var oRs = Oracle.Execute(sql);
@@ -113,7 +113,7 @@ Perslid.prototype._require_prs_perslid = function __require_prs_perslid()
this._prs_perslid_wachtwoord_exp = new Date(oRs("prs_perslid_wachtwoord_exp").Value);
this._prs_perslid_apikey = oRs("prs_perslid_apikey").value;
this._prs_perslid_terms_version = oRs("prs_perslid_terms_version").value;
this._prs_perslid_timezone_offset = oRs("prs_perslid_timezone_offset").value;
this._prs_perslid_timezone = oRs("prs_perslid_timezone").value;
if (this._prs_perslid_options)
{
@@ -509,10 +509,10 @@ Perslid.prototype.terms_version = function _terms_version()
return this._prs_perslid_terms_version;
}
Perslid.prototype.timezone_offset = function _timezone_offset()
Perslid.prototype.timezone = function _timezone()
{
this._require_prs_perslid();
return this._prs_perslid_timezone_offset;
return this._prs_perslid_timezone;
}
// Als de credentials zijn gewijzigd *nadat* je bent ingelogd

View File

@@ -211,6 +211,22 @@ SafeOracle.prototype.Get = function _get (descfield, table, keyname, key)
//else
// ident += "<system>";
var sql_tz, oRs_tz
var tz = "Europe/Amsterdam";
if (Session("user_key")>0)
{
sql_tz = "(SELECT prs_perslid_timezone "
+ " FROM prs_perslid"
+ " WHERE prs_perslid_key = " + Session("user_key") + ")";
oRs_tz = o.Execute(sql_tz);
if (!oRs_tz.eof)
tz = oRs_tz('prs_perslid_timezone').value;
oRs_tz.close();
}
sql_tz = "ALTER SESSION SET TIME_ZONE = '" + tz + "'";
var oRs_tz2 = o.Execute(sql_tz);
var oraprefix = "BEGIN"
+ " DBMS_SESSION.SET_IDENTIFIER(" + safe.quoted_sql(ident) + ");"
+ " fac.initsession("+safe.quoted_sql(user_lang)+");"