diff --git a/public/app/plugins/panel/table/renderer.ts b/public/app/plugins/panel/table/renderer.ts index 524aa06343b..e4cc54e9c40 100644 --- a/public/app/plugins/panel/table/renderer.ts +++ b/public/app/plugins/panel/table/renderer.ts @@ -91,7 +91,14 @@ export class TableRenderer { if (_.isArray(v)) { v = v[0]; } + + // if is an epoch (numeric string and len > 12) + if (_.isString(v) && !isNaN(v) && v.length > 12) { + v = parseInt(v, 10); + } + let date = moment(v); + if (this.isUtc) { date = date.utc(); } diff --git a/public/app/plugins/panel/table/specs/renderer.test.ts b/public/app/plugins/panel/table/specs/renderer.test.ts index f29c69e4acd..f9ccc574c91 100644 --- a/public/app/plugins/panel/table/specs/renderer.test.ts +++ b/public/app/plugins/panel/table/specs/renderer.test.ts @@ -186,6 +186,21 @@ describe('when rendering table', () => { expect(html).toBe('2014-01-01T06:06:06Z'); }); + it('time column with epoch as string should be formatted', () => { + const html = renderer.renderCell(0, 0, '1388556366666'); + expect(html).toBe('2014-01-01T06:06:06Z'); + }); + + it('time column with RFC2822 date as string should be formatted', () => { + const html = renderer.renderCell(0, 0, 'Sat, 01 Dec 2018 01:00:00 GMT'); + expect(html).toBe('2018-12-01T01:00:00Z'); + }); + + it('time column with ISO date as string should be formatted', () => { + const html = renderer.renderCell(0, 0, '2018-12-01T01:00:00Z'); + expect(html).toBe('2018-12-01T01:00:00Z'); + }); + it('undefined time column should be rendered as -', () => { const html = renderer.renderCell(0, 0, undefined); expect(html).toBe('-');