'Parse Date from Script_Fields Params

I am trying to find the elapsed time elapsed time: duration of time b/w now and createdTime

To pass the current_time (ie now) I have added it to the params, and I can access that in the source field by writing params['now'] The problem is that this value of params['now'] is a string and not of type date

The below example works as I have added doc['updatedTime'], in place of params['now'] how can I get it to work with params['now']

WORKING

GET entity.incident_action_item/_search
{
  "script_fields": {
    "timeElapsed": {
      "script": {
        "source": "doc['updatedTime'].value.toInstant().getEpochSecond() - doc['createdTime'].value.toInstant().getEpochSecond()",
        "params": {
          "now": "2022-03-31T17:18:28.153+0530"
        }
      }
    }
  }
}

NOT WORKING

GET entity.incident_action_item/_search
{
  "script_fields": {
    "timeElapsed": {
      "script": {
        "source": "params['now'].value.toInstant().getEpochSecond() - doc['createdTime'].value.toInstant().getEpochSecond()",
        "params": {
          "now": "2022-03-31T17:18:28.153+0530"
        }
      }
    }
  }
}

I have tried multiple combinations and tried different methods supported by the painless language, I was not able to get it work

I faced one or the other exception



Solution 1:[1]

Tldr;

It is a format issue.

The params[now] holds a string type value. You need to convert the string into a ZonedDateTime or DateTime.

String to ZonedDateTime

I have been using the painless Lab available in to run the following code.

String datetime = "2022-03-31T17:18:28.153+0530";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxxxx");
ZonedDateTime zdt = ZonedDateTime.parse(datetime, dtf);
return zdt;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Paulo