diff --git a/changelogs/unreleased/gh-10269-is_interval-for-module-interval.md b/changelogs/unreleased/gh-10269-is_interval-for-module-interval.md
new file mode 100644
index 0000000000000000000000000000000000000000..891e57b2d16f4d24ae39e6ef58fa416587c65e54
--- /dev/null
+++ b/changelogs/unreleased/gh-10269-is_interval-for-module-interval.md
@@ -0,0 +1,4 @@
+## feature/box
+
+* Added the `is_interval` function to check that the provided value is
+  `interval` (gh-10269).
diff --git a/src/lua/datetime.lua b/src/lua/datetime.lua
index a3fd61ea5d7aea12bf9822a2124659543466fc44..633349e3538cb9da976caa6d87b0568c5f1f9326 100644
--- a/src/lua/datetime.lua
+++ b/src/lua/datetime.lua
@@ -1303,6 +1303,7 @@ ffi.metatype(interval_t, {
 
 local interval_mt = {
     new     = interval_new,
+    is_interval = is_interval,
 }
 
 return setmetatable(
diff --git a/test/app-luatest/interval_test.lua b/test/app-luatest/interval_test.lua
index 174e3b5e3e0279dc841a2b8ff37fbd7d96d7786e..1ce22f95fc3805220d2342cb74ae9951cd1a636e 100644
--- a/test/app-luatest/interval_test.lua
+++ b/test/app-luatest/interval_test.lua
@@ -34,3 +34,8 @@ end
 g.test_check_interval_encode_ffi = function()
     t.assert_equals(bin, msgpackffi.encode(val))
 end
+
+g.test_is_interval = function()
+    t.assert(itv.is_interval(val))
+    t.assert_not(itv.is_interval({}))
+end