mirror of
https://github.com/Cacti/cacti.git
synced 2026-11-06 20:13:29 +09:00
* spelling: about Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: accommodates Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: account Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: acquire Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: across Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: actual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: addition Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: administrative Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: agent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: algorithms Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: amongst Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: anchor Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appropriate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: archive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arguments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: assuming Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: asynchronously Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: attachments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: attribute Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: availability Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: behaves Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: being Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: branch Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: calculate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: callback Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: case of Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: certainly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: changes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: characters Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: coalition Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: column Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: configuration Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: confirm Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: connect to Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: consistently Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: containing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: convert Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: corrected Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: current Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: data Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: datasource Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: default Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: delimited Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: delimiter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: deprecated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: description Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: destination Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: determines Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: device Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: devices Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: diagnosing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: dimensional Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: directory Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: disabling Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: distribution Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: documentation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: dynamically Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: embedded Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: enough Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: especially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: everything is Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: everything Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: example Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exceeds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exclude Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: existence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: explicitly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exported Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extract Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extraneous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: failed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fails Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fallback Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fashioned Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: field values Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: foreground Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: format Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: function Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: functions Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: gauge Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: get Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: github Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: global Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: graph Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: gzipped Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: hierarchy Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: identify Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: immediately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: increase Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: increment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: indexes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: inefficient Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: inherited Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: initialize Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: installation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: insufficient Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: irrelevant Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: latest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: leaves Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: local Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: location Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: lockout Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: logging Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: manually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: menus Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: minimum Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: modifiable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: multi Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: multiple Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mutually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: naturally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: navigation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: necessary Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: network Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: number Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurrences Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: only Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: output Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridden Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: override Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: package Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: parameters Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: perform Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: performing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: permanently Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: permission Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: piece Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: plugin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: prevent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: programmatically Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: propagated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: purpose Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: purposes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: push Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: queries Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: refresh Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: relevant Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: remainder Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repetitions Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: representing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: reserved Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: resetting Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: responsible Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: results Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: retrieve Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: routines Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: running Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: section Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: sequences Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: session Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: settings Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: setup Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: snmp Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: some Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: specific Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: specification Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: specified Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: stacked Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: statistics Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: string Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: structure Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: structured Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successfully Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suggested Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suppress Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suppresses Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: switches Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: synchronization Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: synchronize Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: table Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: temperature Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: template Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: temporary Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: textarea Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: the Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: themselves Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: therefore Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thoroughly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: through Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: time Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: timed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: timespan Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tries Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: true Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: uninstall Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unless Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unlocks Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: up to Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: update Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: updating Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: useful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: utility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: variable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: version Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: visibility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: what is Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: when Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: whether Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: written Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
232 lines
9.8 KiB
PHP
232 lines
9.8 KiB
PHP
<?php
|
|
/*
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2022 The Cacti Group |
|
|
| |
|
|
| 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. |
|
|
+-------------------------------------------------------------------------+
|
|
| Cacti: The Complete RRDtool-based Graphing Solution |
|
|
+-------------------------------------------------------------------------+
|
|
| This code is designed, written, and maintained by the Cacti Group. See |
|
|
| about.php and/or the AUTHORS file for specific developer information. |
|
|
+-------------------------------------------------------------------------+
|
|
| http://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
/* get_timespan - returns start/end time for given date and timespan
|
|
* do NOT use absolute numbers of seconds but let php
|
|
* do all the time calculations to cover:
|
|
* leap years, daylight savings and weekdays ...
|
|
@arg $span - array &$timespan (begin_now, end_now)
|
|
@arg $curr_time - base date (time since epoch)
|
|
@arg $timespan_given - timespan as given by global_arrays.php($graph_timespans)
|
|
@arg $first_weekdayid - first weekday (numeric representation) */
|
|
function get_timespan(&$span, $curr_time, $timespan_given, $first_weekdayid) {
|
|
# unless changed later, $span['end_now'] is always $curr_time
|
|
$span['begin_now'] = $curr_time; # initialization only!
|
|
$span['end_now'] = $curr_time;
|
|
|
|
switch ($timespan_given) {
|
|
case GT_LAST_HALF_HOUR:
|
|
$span['begin_now'] = strtotime('-30 minutes', $curr_time);
|
|
break;
|
|
case GT_LAST_HOUR:
|
|
$span['begin_now'] = strtotime('-1 hour', $curr_time);
|
|
break;
|
|
case GT_LAST_2_HOURS:
|
|
$span['begin_now'] = strtotime('-2 hours', $curr_time);
|
|
break;
|
|
case GT_LAST_4_HOURS:
|
|
$span['begin_now'] = strtotime('-4 hours', $curr_time);
|
|
break;
|
|
case GT_LAST_6_HOURS:
|
|
$span['begin_now'] = strtotime('-6 hours', $curr_time);
|
|
break;
|
|
case GT_LAST_12_HOURS:
|
|
$span['begin_now'] = strtotime('-12 hours', $curr_time);
|
|
break;
|
|
case GT_LAST_DAY:
|
|
$span['begin_now'] = strtotime('-1 day', $curr_time);
|
|
break;
|
|
case GT_LAST_2_DAYS:
|
|
$span['begin_now'] = strtotime('-2 days', $curr_time);
|
|
break;
|
|
case GT_LAST_3_DAYS:
|
|
$span['begin_now'] = strtotime('-3 days', $curr_time);
|
|
break;
|
|
case GT_LAST_4_DAYS:
|
|
$span['begin_now'] = strtotime('-4 days', $curr_time);
|
|
break;
|
|
case GT_LAST_WEEK:
|
|
$span['begin_now'] = strtotime('-1 week', $curr_time);
|
|
break;
|
|
case GT_LAST_2_WEEKS:
|
|
$span['begin_now'] = strtotime('-2 weeks', $curr_time);
|
|
break;
|
|
case GT_LAST_MONTH:
|
|
$span['begin_now'] = strtotime('-1 month', $curr_time);
|
|
break;
|
|
case GT_LAST_2_MONTHS:
|
|
$span['begin_now'] = strtotime('-2 months', $curr_time);
|
|
break;
|
|
case GT_LAST_3_MONTHS:
|
|
$span['begin_now'] = strtotime('-3 months', $curr_time);
|
|
break;
|
|
case GT_LAST_4_MONTHS:
|
|
$span['begin_now'] = strtotime('-4 months', $curr_time);
|
|
break;
|
|
case GT_LAST_6_MONTHS:
|
|
$span['begin_now'] = strtotime('-6 months', $curr_time);
|
|
break;
|
|
case GT_LAST_YEAR:
|
|
$span['begin_now'] = strtotime('-1 year', $curr_time);
|
|
break;
|
|
case GT_LAST_2_YEARS:
|
|
$span['begin_now'] = strtotime('-2 years', $curr_time);
|
|
break;
|
|
case GT_DAY_SHIFT:
|
|
# take this day, start and end time fetched from config_settings
|
|
$span['begin_now'] = strtotime(date('Y-m-d', $curr_time) . ' ' . read_user_setting('day_shift_start'));
|
|
$span['end_now'] = strtotime(date('Y-m-d', $curr_time) . ' ' . read_user_setting('day_shift_end'));
|
|
break;
|
|
case GT_THIS_DAY:
|
|
# return Year-Month-Day for given 'time since epoch'
|
|
# and convert this to 'time since epoch' (Hour:Minute:Second set to 00:00:00)
|
|
$span['begin_now'] = strtotime(date('Y-m-d', $curr_time));
|
|
$span['end_now'] = strtotime('+1 day', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_THIS_WEEK:
|
|
# compute offset to start-of-week
|
|
# remember: start-of-week may be > current-weekday, so do modulo calc
|
|
$offset = (date('w',$curr_time) - $first_weekdayid + 7) % 7;
|
|
$span['begin_now'] = strtotime( '-' . $offset . ' days' . date('Y-m-d', $curr_time));
|
|
$span['end_now'] = strtotime('+1 week', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_THIS_MONTH:
|
|
# this date format set day-of-month to 01
|
|
$span['begin_now'] = strtotime(date('Y-m-01', $curr_time));
|
|
$span['end_now'] = strtotime('+1 month', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_THIS_YEAR:
|
|
# this date format set day-of-month to 01 and month-of-year to 01
|
|
$span['begin_now'] = strtotime(date('Y-01-01', $curr_time));
|
|
$span['end_now'] = strtotime('+1 year', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_PREV_DAY:
|
|
$span['begin_now'] = strtotime('-1 day' . date('Y-m-d', $curr_time));
|
|
$span['end_now'] = strtotime('+1 day', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_PREV_WEEK:
|
|
# compute offset to start-of-week
|
|
# remember: start-of-week may be > current-weekday, so do modulo calc
|
|
$offset = (date('w',$curr_time) - $first_weekdayid + 7) % 7;
|
|
$span['begin_now'] = strtotime( '-1 week -' . $offset . ' days' . date('Y-m-d', $curr_time));
|
|
$span['end_now'] = strtotime('+1 week', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_PREV_MONTH:
|
|
$span['begin_now'] = strtotime('-1 month' . date('Y-m-01', $curr_time));
|
|
$span['end_now'] = strtotime('+1 month', $span['begin_now']) - 1;
|
|
break;
|
|
case GT_PREV_YEAR:
|
|
$span['begin_now'] = strtotime('-1 year' . date('Y-01-01', $curr_time));
|
|
$span['end_now'] = strtotime('+1 year', $span['begin_now']) - 1;
|
|
break;
|
|
default:
|
|
$span['begin_now'] = $curr_time - DEFAULT_TIMESPAN;
|
|
break;
|
|
}
|
|
|
|
# reformat time-since-epoch start/end times to human readable format
|
|
$span['current_value_date1'] = date('Y-m-d H:i',$span['begin_now']);
|
|
$span['current_value_date2'] = date('Y-m-d H:i',$span['end_now']);
|
|
}
|
|
|
|
/* month_shift - check for shifting one or more months
|
|
* @arg $shift_size - requested shift amount
|
|
* returns - true, if month shifting required, else false
|
|
*/
|
|
function month_shift($shift_size) {
|
|
# is monthly shifting required?
|
|
return ( strpos(strtolower($shift_size), 'month') > 0);
|
|
}
|
|
|
|
/* check_month_boundaries - check given boundaries for begin/end of month matching
|
|
* @arg $span - array $timespan with given boundaries
|
|
* returns - true, if begin AND end match month begin/end boundaries
|
|
*/
|
|
function check_month_boundaries(&$span) {
|
|
# check left boundary -----------------------------------------------
|
|
$begin_of_month = strtotime(date('Y-m-01', $span['begin_now']));
|
|
$begin_match = ( $begin_of_month == $span['begin_now']);
|
|
|
|
# check right boundary ----------------------------------------------
|
|
# first, get a defined date of the month, $span['end_now'] belongs to
|
|
$begin_of_month = strtotime(date('Y-m-01', $span['end_now']));
|
|
# do "end of month" magic to get end_of_month for arbitrary months
|
|
$end_of_month = strtotime('+1 month', $begin_of_month) - 1;
|
|
|
|
# accept end of month if no seconds given (adjust for 59 missing seconds)
|
|
$end_match = ( (($end_of_month - 59) <= $span['end_now']) && ($span['end_now'] <= $end_of_month));
|
|
|
|
return ( $begin_match && $end_match );
|
|
}
|
|
|
|
/* shift_right_boundary - shift right boundary with end-of-month adjustment
|
|
* @arg $span - timespan array
|
|
* @arg $direction - shift left/right (-/+)
|
|
* @arg $shift_size - amount of shift
|
|
* returns - time-since-epoch for shifted right boundary
|
|
*/
|
|
function shift_right_boundary(&$span, $direction, $shift_size) {
|
|
# first, get begin of the month, $span['end_now'] belongs to
|
|
$begin = date('Y-m-01', $span['end_now']);
|
|
|
|
# shift the begin date to correct month
|
|
$begin_of_shifted_month = strtotime($direction . $shift_size . ' ' . $begin);
|
|
|
|
# do "end of month" magic
|
|
return strtotime('+1 month', $begin_of_shifted_month) - 1;
|
|
}
|
|
|
|
/* shift_time - shift given timespan left/right
|
|
* @arg &$span - given timespan (start/end time as time-since-epoch and human readable)
|
|
* @arg $direction - "-" for shifting left, "+" for shifting right
|
|
* @arg $timeshift - amount of shifting
|
|
*/
|
|
function shift_time(&$span, $direction, $shift_size) {
|
|
# move left/right according to $direction
|
|
# amount to be moved is derived from $shift_size
|
|
# base dates are taken from array $span
|
|
|
|
# is this a month shift AND current timespan is on month boundaries?
|
|
if ( month_shift($shift_size) && check_month_boundaries($span) ) {
|
|
# shift left boundary
|
|
$span['begin_now'] = strtotime($direction . $shift_size . ' ' . $span['current_value_date1']);
|
|
# shifting right boundary is somewhat complicated
|
|
$span['end_now'] = shift_right_boundary($span, $direction, $shift_size);
|
|
} else {
|
|
# 'normal' time shifting: use strtotime magic
|
|
$span['begin_now'] = strtotime($direction . $shift_size . ' ' . $span['current_value_date1']);
|
|
$span['end_now'] = strtotime($direction . $shift_size . ' ' . $span['current_value_date2']);
|
|
}
|
|
|
|
# convert to human readable format
|
|
$span['current_value_date1'] = date('Y-m-d H:i', $span['begin_now']);
|
|
$span['current_value_date2'] = date('Y-m-d H:i', $span['end_now']);
|
|
|
|
# now custom time settings in effect
|
|
$_SESSION['sess_current_timespan'] = GT_CUSTOM;
|
|
$_SESSION['custom'] = 1;
|
|
set_request_var('predefined_timespan', GT_CUSTOM);
|
|
}
|
|
|