From 8437c19b1bf485c5df613d0426e40e7e0eb7ee9a Mon Sep 17 00:00:00 2001 From: grechka62 Date: Fri, 6 Mar 2026 16:42:30 +0300 Subject: [PATCH] Support getTimestamp in android commit_hash:7475956d89071e33339c71f4a35eb4f73065e47b --- .../function/BuiltinFunctionProvider.kt | 1 + .../evaluable/function/DateTimeFunctions.kt | 20 +++++++++++++++++++ .../function/DateTimeFunctionsTest.kt | 17 ++++++++++++++++ expression-api/translations.json | 8 ++++++++ 4 files changed, 46 insertions(+) diff --git a/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/BuiltinFunctionProvider.kt b/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/BuiltinFunctionProvider.kt index a177aae89..3de9eb1c5 100644 --- a/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/BuiltinFunctionProvider.kt +++ b/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/BuiltinFunctionProvider.kt @@ -119,6 +119,7 @@ internal object BuiltinFunctionProvider : FunctionProvider { registry.register(GetMinutes) registry.register(GetSeconds) registry.register(GetMillis) + registry.register(GetTimestamp) registry.register(FormatDateAsLocal) registry.register(FormatDateAsUTC) registry.register(FormatDateAsLocalWithLocale) diff --git a/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/DateTimeFunctions.kt b/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/DateTimeFunctions.kt index 05d2c43fb..ae9b07fc9 100644 --- a/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/DateTimeFunctions.kt +++ b/client/android/div-evaluable/src/main/java/com/yandex/div/evaluable/function/DateTimeFunctions.kt @@ -530,6 +530,26 @@ internal object GetMillis : Function() { } } +internal object GetTimestamp : Function() { + + override val name = "getTimestamp" + + override val declaredArgs = listOf( + FunctionArgument(type = EvaluableType.DATETIME) + ) + override val resultType = EvaluableType.INTEGER + override val isPure = true + + override fun evaluate( + evaluationContext: EvaluationContext, + expressionContext: ExpressionContext, + args: List + ): Any { + val datetime = args[0] as DateTime + return datetime.timestampMillis + } +} + internal object FormatDateAsLocal : Function() { override val name = "formatDateAsLocal" diff --git a/client/android/div-evaluable/src/test/java/com/yandex/div/evaluable/function/DateTimeFunctionsTest.kt b/client/android/div-evaluable/src/test/java/com/yandex/div/evaluable/function/DateTimeFunctionsTest.kt index 3183134e6..af840dec1 100644 --- a/client/android/div-evaluable/src/test/java/com/yandex/div/evaluable/function/DateTimeFunctionsTest.kt +++ b/client/android/div-evaluable/src/test/java/com/yandex/div/evaluable/function/DateTimeFunctionsTest.kt @@ -97,4 +97,21 @@ class DateTimeFunctionsTest { Assert.assertEquals(dateTime.toString(), formattedDateTime) } + + @Test + fun getTimestampReturnsDateTimeInMilliseconds() { + val timestampMillis = 1772107200000L + val dateTime = DateTime( + timestampMillis, + TimeZone.getTimeZone("GMT+1") + ) + + val result = GetTimestamp.invoke( + evaluationContext, + expressionContext, + args = listOf(dateTime) + ) + + Assert.assertEquals(timestampMillis, result) + } } diff --git a/expression-api/translations.json b/expression-api/translations.json index f328efb61..fc3de9ca1 100644 --- a/expression-api/translations.json +++ b/expression-api/translations.json @@ -752,6 +752,14 @@ "en": "Datetime value, date to get milliseconds.", "ru": "Значение даты и времени, дата для получения миллисекунд." }, + "gettimestamp_datetime": { + "en": "Returns the datetime value as timestamp in milliseconds.", + "ru": "Возвращает значение даты и времени в миллисекундах." + }, + "gettimestamp_datetime_arg0": { + "en": "Datetime value to convert to timestamp in milliseconds.", + "ru": "Значение даты и времени для преобразования в миллисекунды." + }, "getminutes_datetime": { "en": "Returns minutes number of original date.", "ru": "Возвращает значение минут исходной даты."