diff --git a/public/app/core/utils/datemath.ts b/public/app/core/utils/datemath.ts index 2aa793016ba..f5608443f49 100644 --- a/public/app/core/utils/datemath.ts +++ b/public/app/core/utils/datemath.ts @@ -5,7 +5,7 @@ import moment from 'moment'; var units = ['y', 'M', 'w', 'd', 'h', 'm', 's']; -export function parse(text, roundUp?) { +export function parse(text, roundUp?, timezone?) { if (!text) { return undefined; } if (moment.isMoment(text)) { return text; } if (_.isDate(text)) { return moment(text); } @@ -16,7 +16,11 @@ export function parse(text, roundUp?) { var parseString; if (text.substring(0, 3) === 'now') { - time = moment(); + if (timezone === 'utc') { + time = moment.utc(); + } else { + time = moment(); + } mathString = text.substring('now'.length); } else { index = text.indexOf('||'); diff --git a/public/app/features/dashboard/time_srv.ts b/public/app/features/dashboard/time_srv.ts index db6ba437e73..eb4bddb9e80 100644 --- a/public/app/features/dashboard/time_srv.ts +++ b/public/app/features/dashboard/time_srv.ts @@ -195,10 +195,11 @@ class TimeSrv { from: moment.isMoment(this.time.from) ? moment(this.time.from) : this.time.from, to: moment.isMoment(this.time.to) ? moment(this.time.to) : this.time.to, }; + var timezone = this.dashboard && this.dashboard.getTimezone ? this.dashboard.getTimezone() : 'local'; return { - from: dateMath.parse(raw.from, false), - to: dateMath.parse(raw.to, true), + from: dateMath.parse(raw.from, false, timezone), + to: dateMath.parse(raw.to, true, timezone), raw: raw }; } diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts index 4e804c1f88a..1d055c11da0 100644 --- a/public/app/features/panel/metrics_panel_ctrl.ts +++ b/public/app/features/panel/metrics_panel_ctrl.ts @@ -217,7 +217,10 @@ class MetricsPanelCtrl extends PanelCtrl { "__interval_ms": {text: this.intervalMs, value: this.intervalMs}, }); + var timezone = this.dashboard.getTimezone ? this.dashboard.getTimezone() : 'local'; + var metricsQuery = { + timezone: timezone, panelId: this.panel.id, range: this.range, rangeRaw: this.range.raw, diff --git a/public/test/core/utils/datemath_specs.ts b/public/test/core/utils/datemath_specs.ts index e027a59c2ee..f00befa5457 100644 --- a/public/test/core/utils/datemath_specs.ts +++ b/public/test/core/utils/datemath_specs.ts @@ -46,6 +46,14 @@ describe("DateMath", () => { expect(startOfDay).to.be(expected.getTime()); }); + it("now/d on a utc dashboard should be start of the current day in UTC time", () => { + var today = new Date(); + var expected = new Date(Date.UTC(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0)); + + var startOfDay = dateMath.parse('now/d', false, 'utc').valueOf(); + expect(startOfDay).to.be(expected.getTime()); + }); + describe('subtraction', () => { var now; var anchored;