# Kibana Scripted Field HourOfDay

**URL:** <https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447>\
**Category:** Kibana\
**Tags:** painless\
**Created:** [August 4, 2022, 3:43pm UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447 "2022-08-04T15:43:17Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![fim01](https://avatars.discourse-cdn.com/v4/letter/f/b4bc9f/32.png) [@fim01](https://discuss.elastic.co/u/fim01)\
**Post date:** [August 4, 2022, 3:43pm UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447/1 "2022-08-04T15:43:17Z")

</div>

I followed documentation to create a simple scripted field to calculate HourOfDay

> **[Lucene expressions language | Elasticsearch Guide \[8.1\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-scripting-expression.html)**

doc['@timestamp'].date.hourOfDay

error:

```auto
{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 9,
    "successful": 8,
    "skipped": 8,
    "failed": 1,
    "failures": [
      {
        "shard": 0,
        "index": "sanitas-apitsl-000009",
        "node": "OdEMJt__QDK1fSI1zeU3IA",
        "reason": {
          "type": "script_exception",
          "reason": "runtime error",
          "script_stack": [
            "doc['@timestamp'].date.hourOfDay",
            " ^---- HERE"
          ],
          "script": "doc['@timestamp'].date.hourOfDay",
          "lang": "painless",
          "position": {
            "offset": 17,
            "start": 0,
            "end": 32
          },
          "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Illegal list shortcut value [date]."
          }
        }
      }
    ]
  },
  "hits": {
    "max_score": null,
    "hits": []
  }
}

```

What I'm doing wrong?

Elasticsearch/Kibana: 8.1.3

---

<div class="post-metadata">

**Author:** ![Marta\_Bondyra](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marta_bondyra/32/102122_2.png) [@Marta\_Bondyra](https://discuss.elastic.co/u/Marta_Bondyra)\
**Post date:** [August 12, 2022, 7:44am UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447/2 "2022-08-12T07:44:39Z")

</div>

Could you check if correcting it to `doc['@timestamp'].value.getHour()` helps?

---

<div class="post-metadata">

**Author:** ![stu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stu/32/75063_2.png) [@stu](https://discuss.elastic.co/u/stu)\
**Post date:** [August 12, 2022, 3:20pm UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447/3 "2022-08-12T15:20:25Z")

</div>

@Marta_Bondyra is correct that, for `"lang": "painless"`, `doc['@timestamp'].value.getHour()` is the way to go.

```auto
GET ts/_search
{
  "script_fields": {
    "hod": {
      "script": {
        "source": "doc['@timestamp'].value.getHour()",
        "lang": "painless"
      }
    }
  }
}

```

The docs you are referencing are for `"lang": "expression"` which has a slightly different API.

```auto
GET ts/_search
{
  "script_fields": {
    "hod": {
      "script": {
        "source": "doc['@timestamp'].date.hourOfDay",
        "lang": "expression"
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![fim01](https://avatars.discourse-cdn.com/v4/letter/f/b4bc9f/32.png) [@fim01](https://discuss.elastic.co/u/fim01)\
**Post date:** [August 22, 2022, 8:14am UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447/4 "2022-08-22T08:14:14Z")

</div>

Thanks for you replies.

I solved "my" problem as follows:

> return doc['@timestamp'].value.withZoneSameInstant(ZoneId.of('Europe/Berlin')).getHour();

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 19, 2022, 8:14am UTC](https://discuss.elastic.co/t/kibana-scripted-field-hourofday/311447/5 "2022-09-19T08:14:40Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
