Просмотр исходного кода

feat: add date_to_unix_ts/3 function to the rule engine

Fixes:
https://emqx.atlassian.net/browse/EMQX-9245
Kjell Winblad 2 лет назад
Родитель
Сommit
d3ccd8a65d

+ 9 - 0
apps/emqx_rule_engine/src/emqx_rule_funcs.erl

@@ -227,6 +227,7 @@
     now_timestamp/1,
     format_date/3,
     format_date/4,
+    date_to_unix_ts/3,
     date_to_unix_ts/4
 ]).
 
@@ -1085,6 +1086,14 @@ format_date(TimeUnit, Offset, FormatString, TimeEpoch) ->
         )
     ).
 
+date_to_unix_ts(TimeUnit, FormatString, InputString) ->
+    emqx_rule_date:parse_date(
+        time_unit(TimeUnit),
+        "Z",
+        emqx_plugin_libs_rule:str(FormatString),
+        emqx_plugin_libs_rule:str(InputString)
+    ).
+
 date_to_unix_ts(TimeUnit, Offset, FormatString, InputString) ->
     emqx_rule_date:parse_date(
         time_unit(TimeUnit),

+ 18 - 0
apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl

@@ -1003,6 +1003,24 @@ prop_format_date_fun() ->
                         )
                     ]
             )
+    ),
+    %% When no offset is specified, the offset should be taken from the formatted time string
+    ArgsNoOffset = [<<"second">>, <<"%y-%m-%d-%H:%M:%S%Z">>],
+    ArgsOffset = [<<"second">>, <<"+08:00">>, <<"%y-%m-%d-%H:%M:%S%Z">>],
+    ?FORALL(
+        S,
+        erlang:system_time(second),
+        S ==
+            apply_func(
+                date_to_unix_ts,
+                ArgsNoOffset ++
+                    [
+                        apply_func(
+                            format_date,
+                            ArgsOffset ++ [S]
+                        )
+                    ]
+            )
     ).
 
 %%------------------------------------------------------------------------------

+ 1 - 0
changes/ce/feat-10392.en.md

@@ -0,0 +1 @@
+A new function to convert a formatted date to an integer timestamp has been added: date_to_unix_ts/3