Elasticsearch timezone issue with Laravel

Adithya
1 min readApr 4, 2021

--

After noticing something funny in my query results with Elasticsearch, I digged down to see what was happening. A lot of head scratching, cups of coffee after — the issue made sense.

My Laravel project has an elasticsearch query to fetch all records created in the last hour

‘range’: { ‘created_at’: { ‘gte’: ‘now-1h’ } }

I executed this on Kibana’s dev tools and the results with my sample data set was fine. Once I started syncing the data from MySQL to an Elasticsearch Index, the appropriate result set wasn’t being retrieved.

Turns out that Elasticsearch always stores the timestamps in UTC [https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html] where as the timezone in my Laravel project is set to CET which is +2 UTC.

Be careful here though — it isn’t as simple as changing the timezone on your app (you probably shouldn’t!) and you also cannot change the timezone on Elasticsearch. now is not influenced [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html#range-query-time-zone] by the time_zone parameter in a range query.

//In MySQL record — created_at 2021–04–04 22:12:09

//In Elasticsearch Index 2021–04–04T20:12:09.000000Z

For now, all I can think of is to account for the +2 UTC and hard code it to now-3h which works for now. Ideally, all of the dates synced should be converted to UTC and stored which would solve this issue.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Adithya
Adithya

Written by Adithya

Backend developer from Berlin, building https://arbeitnow.com/

No responses yet

Write a response