You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
7.5 KiB
285 lines
7.5 KiB
/*
|
|
** Zabbix
|
|
** Copyright (C) 2001-2023 Zabbix SIA
|
|
**
|
|
** This program is free software; you can redistribute it and/or modify
|
|
** it under the terms of the GNU General Public License as published by
|
|
** the Free Software Foundation; either version 2 of the License, or
|
|
** (at your option) any later version.
|
|
**
|
|
** This program is distributed in the hope that it will be useful,
|
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
** GNU General Public License for more details.
|
|
**
|
|
** You should have received a copy of the GNU General Public License
|
|
** along with this program; if not, write to the Free Software
|
|
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
**/
|
|
|
|
var CDate = function () {
|
|
this.clientDate = (arguments.length > 0)
|
|
? new Date(arguments[0])
|
|
: new Date();
|
|
this.calcTZdiff(this.clientDate.getTime());
|
|
this.serverDate = new Date(this.clientDate.getTime() - this.tzDiff * 1000);
|
|
};
|
|
|
|
CDate.prototype = {
|
|
server: 0, // getTime uses clients :0, or servers time :1
|
|
tzDiff: 0, // server and client TZ diff
|
|
clientDate: null, // clients(JS, Browser) date object
|
|
serverDate: null, // servers(PHP, Unix) date object
|
|
|
|
calcTZdiff: function(time) {
|
|
if (time === undefined) {
|
|
time = new Date().getTime();
|
|
}
|
|
|
|
const timestamp = Object.keys(PHP_TZ_OFFSETS).reverse().find((ts) => ts * 1000 <= time);
|
|
|
|
this.tzDiff = this.clientDate.getTimezoneOffset() * -60 - PHP_TZ_OFFSETS[timestamp];
|
|
},
|
|
|
|
/**
|
|
* Formats date according given format. Uses server timezone.
|
|
* Supported formats: 'd M Y H:i', 'j. M Y G:i', 'Y/m/d H:i', 'Y-m-d H:i', 'Y-m-d H:i:s', 'Y-m-d', 'H:i:s', 'H:i',
|
|
* 'M jS, Y h:i A', 'Y M d H:i', 'd.m.Y H:i' and 'd m Y H i'
|
|
* Format 'd m Y H i' is also accepted but used internally for date input fields.
|
|
*
|
|
* @param format PHP style date format limited to supported formats
|
|
*
|
|
* @return string|bool human readable date or false if unsupported format given
|
|
*/
|
|
format: function(format) {
|
|
var shortMn = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
|
|
var dt = this.getDate(),
|
|
mnth = this.getMonth(),
|
|
yr = this.getFullYear(),
|
|
hrs = this.getHours(),
|
|
mnts = this.getMinutes(),
|
|
sec = this.getSeconds();
|
|
|
|
/**
|
|
* Append date suffix according to English rules e.g., 3 becomes 3rd.
|
|
*
|
|
* @param int date
|
|
*
|
|
* @return string
|
|
*/
|
|
var appSfx = function(date) {
|
|
if (date % 10 == 1 && date != 11) {
|
|
return date + 'st';
|
|
}
|
|
if (date % 10 == 2 && date != 12) {
|
|
return date + 'nd';
|
|
}
|
|
if (date % 10 == 3 && date != 13) {
|
|
return date + 'rd';
|
|
}
|
|
return date + 'th';
|
|
};
|
|
|
|
switch (format) {
|
|
case 'd M Y H:i':
|
|
return appendZero(dt) + ' ' + shortMn[mnth] + ' ' + yr + ' ' + appendZero(hrs) + ':' + appendZero(mnts);
|
|
case 'j. M Y G:i':
|
|
return dt + '. ' + shortMn[mnth] + ' ' + yr + ' ' + hrs + ':' + appendZero(mnts);
|
|
case 'Y/m/d H:i':
|
|
return yr + '/' + appendZero(mnth + 1) + '/' + appendZero(dt) + ' ' + appendZero(hrs) + ':' +
|
|
appendZero(mnts);
|
|
case 'Y-m-d H:i':
|
|
return yr + '-' + appendZero(mnth + 1) + '-' + appendZero(dt) + ' ' + appendZero(hrs) + ':' +
|
|
appendZero(mnts);
|
|
case 'Y-m-d':
|
|
return yr + '-' + appendZero(mnth + 1) + '-' + appendZero(dt);
|
|
case 'H:i:s':
|
|
return appendZero(hrs) + ':' + appendZero(mnts) + ':' + appendZero(sec);
|
|
case 'H:i':
|
|
return appendZero(hrs) + ':' + appendZero(mnts);
|
|
case 'M jS, Y h:i A':
|
|
var ampm = (hrs < 12) ? 'AM' : 'PM';
|
|
hrs = appendZero((hrs + 11) % 12 + 1);
|
|
return shortMn[mnth] + ' ' + appSfx(dt) + ', ' + yr + ' ' + hrs + ':' + appendZero(mnts) + ' ' + ampm;
|
|
case 'Y M d H:i':
|
|
return yr + ' ' + shortMn[mnth] + ' ' +appendZero(dt) + ' ' + appendZero(hrs) + ':' + appendZero(mnts);
|
|
case 'd.m.Y H:i':
|
|
return appendZero(dt) + '.' + appendZero(mnth + 1) + '.' + yr + ' ' + appendZero(hrs) + ':' +
|
|
appendZero(mnts);
|
|
case 'd. m. Y H:i':
|
|
return appendZero(dt) + '. ' + appendZero(mnth + 1) + '. ' + yr + ' ' + appendZero(hrs) + ':' +
|
|
appendZero(mnts);
|
|
// date format used for date input fields
|
|
case 'd m Y H i':
|
|
return appendZero(dt) + ' ' + appendZero(mnth + 1) + ' ' + yr + ' ' + appendZero(hrs) + ' ' +
|
|
appendZero(mnts);
|
|
default:
|
|
// defaults to Y-m-d H:i:s
|
|
return yr + '-' + appendZero(mnth + 1) + '-' + appendZero(dt) + ' ' + appendZero(hrs) + ':' +
|
|
appendZero(mnts) + ':' + appendZero(sec);
|
|
}
|
|
},
|
|
|
|
getZBXDate: function() {
|
|
var thedate = [];
|
|
thedate[0] = this.serverDate.getDate();
|
|
thedate[1] = this.serverDate.getMonth() + 1;
|
|
thedate[2] = this.serverDate.getFullYear();
|
|
thedate[3] = this.serverDate.getHours();
|
|
thedate[4] = this.serverDate.getMinutes();
|
|
thedate[5] = this.serverDate.getSeconds();
|
|
|
|
for (var i = 0; i < thedate.length; i++) {
|
|
if ((thedate[i] + '').length < 2) {
|
|
thedate[i] = '0' + thedate[i];
|
|
}
|
|
}
|
|
|
|
return '' + thedate[2] + thedate[1] + thedate[0] + thedate[3] + thedate[4] + thedate[5];
|
|
},
|
|
|
|
setZBXDate: function(strdate) {
|
|
this.setTimeObject(
|
|
strdate.toString().substr(0, 4),
|
|
strdate.toString().substr(4, 2) - 1,
|
|
strdate.toString().substr(6, 2),
|
|
strdate.toString().substr(8, 2),
|
|
strdate.toString().substr(10, 2),
|
|
strdate.toString().substr(12, 2)
|
|
);
|
|
|
|
return this.getTime();
|
|
},
|
|
|
|
toString: function() {
|
|
return this.serverDate.toString();
|
|
},
|
|
|
|
parse: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setTime(Date.parse(arg));
|
|
this.calcTZdiff();
|
|
|
|
return this.getTime();
|
|
},
|
|
|
|
getMilliseconds: function() {
|
|
return this.serverDate.getMilliseconds();
|
|
},
|
|
|
|
getSeconds: function() {
|
|
return this.serverDate.getSeconds();
|
|
},
|
|
|
|
getMinutes: function() {
|
|
return this.serverDate.getMinutes();
|
|
},
|
|
|
|
getHours: function() {
|
|
return this.serverDate.getHours();
|
|
},
|
|
|
|
getDay: function() {
|
|
return this.serverDate.getDay();
|
|
},
|
|
|
|
getMonth: function() {
|
|
return this.serverDate.getMonth();
|
|
},
|
|
|
|
getYear: function() {
|
|
return this.serverDate.getYear();
|
|
},
|
|
|
|
getFullYear: function() {
|
|
return this.serverDate.getFullYear();
|
|
},
|
|
|
|
getDate: function() {
|
|
return this.serverDate.getDate();
|
|
},
|
|
|
|
getTime: function() {
|
|
if (this.server == 1) {
|
|
return this.serverDate.getTime() + this.tzDiff * 1000;
|
|
}
|
|
else {
|
|
return this.clientDate.getTime();
|
|
}
|
|
},
|
|
|
|
setMilliseconds: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setMilliseconds(arg);
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setSeconds: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setSeconds(arg);
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setMinutes: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setMinutes(arg);
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setHours: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setHours(arg);
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setDate: function(arg) {
|
|
this.server = 1;
|
|
this.serverDate.setDate(arg);
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setTimeObject: function(y, m, d, h, i, s) {
|
|
this.server = 1;
|
|
function hasAttr(arg) {
|
|
return (typeof(arg) != 'undefined' && arg !== null);
|
|
}
|
|
|
|
if (hasAttr(y)) {
|
|
this.serverDate.setFullYear(y);
|
|
}
|
|
|
|
if (hasAttr(m) && hasAttr(d)) {
|
|
this.serverDate.setMonth(m, d);
|
|
}
|
|
else if (hasAttr(m)) {
|
|
this.serverDate.setMonth(m);
|
|
}
|
|
else if (hasAttr(d)) {
|
|
this.serverDate.setDate(d);
|
|
}
|
|
|
|
if (hasAttr(h)) {
|
|
this.serverDate.setHours(h);
|
|
}
|
|
|
|
if (hasAttr(i)) {
|
|
this.serverDate.setMinutes(i);
|
|
}
|
|
|
|
if (hasAttr(s)) {
|
|
this.serverDate.setSeconds(s);
|
|
}
|
|
|
|
this.calcTZdiff();
|
|
},
|
|
|
|
setTime: function(arg) {
|
|
arg = parseInt(arg, 10);
|
|
this.server = 0;
|
|
this.clientDate.setTime(arg);
|
|
this.calcTZdiff(arg);
|
|
this.serverDate.setTime(arg - this.tzDiff * 1000);
|
|
}
|
|
};
|