Skip to content

Commit

Permalink
respect timezone setting
Browse files Browse the repository at this point in the history
  • Loading branch information
flash1293 committed Dec 4, 2019
1 parent e5153c0 commit 0cfa9c9
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions x-pack/legacy/plugins/canvas/public/functions/timelion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
*/

import { flatten } from 'lodash';
import moment from 'moment-timezone';
import chrome from 'ui/chrome';
import { npStart } from 'ui/new_platform';
import { TimeRange } from 'src/plugins/data/common';
import { ExpressionFunction, DatatableRow } from 'src/plugins/expressions/public';
import { fetch } from '../../common/lib/fetch';
// @ts-ignore untyped local
Expand All @@ -22,6 +24,26 @@ interface Arguments {
timezone: string;
}

/**
* This function parses a given time range containing date math
* and returns ISO dates. Parsing is done respecting the given time zone.
* @param timeRange time range to parse
* @param timeZone time zone to do the parsing in
*/
function parseDateMath(timeRange: TimeRange, timeZone: string) {
// the datemath plugin always parses dates by using the current default moment time zone.
// to use the configured time zone, we are switching just for the bounds calculation.
const defaultTimezone = moment().zoneName();
moment.tz.setDefault(timeZone);

const parsedRange = npStart.plugins.data.query.timefilter.timefilter.calculateBounds(timeRange);

// reset default moment timezone
moment.tz.setDefault(defaultTimezone);

return parsedRange;
}

export function timelion(): ExpressionFunction<'timelion', Filter, Arguments, Promise<Datatable>> {
const { help, args: argHelp } = getFunctionHelp().timelion;

Expand Down Expand Up @@ -66,10 +88,7 @@ export function timelion(): ExpressionFunction<'timelion', Filter, Arguments, Pr
const timeFilter = context.and.find(and => and.type === 'time');
const range = timeFilter
? { min: timeFilter.from, max: timeFilter.to }
: npStart.plugins.data.query.timefilter.timefilter.calculateBounds({
from: args.from,
to: args.to,
});
: parseDateMath({ from: args.from, to: args.to }, args.timezone);

const body = {
extended: {
Expand Down

0 comments on commit 0cfa9c9

Please sign in to comment.