diff --git a/application/source/data/transformer.mjs b/application/source/data/transformer.mjs
index 4e9fe3fe868254c6ada300534119c0ee260901a7..3bc54736c8be59f19c12481c7e7fd5d9007f5586 100644
--- a/application/source/data/transformer.mjs
+++ b/application/source/data/transformer.mjs
@@ -5,6 +5,7 @@
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
  */
 
+import {getLocaleOfDocument} from "../dom/locale.mjs";
 import {Base} from "../types/base.mjs";
 import {getGlobal, getGlobalObject} from "../types/global.mjs";
 import {ID} from "../types/id.mjs";
@@ -169,6 +170,11 @@ function transform(value) {
     let element;
     let attribute;
     let translations;
+    let date;
+    let locale;
+    let timestamp;
+    let map;
+    let keyValue;
 
     switch (this.command) {
         case "static":
@@ -405,25 +411,25 @@ function transform(value) {
                 if (key === undefined) {
                     throw new Error("missing key parameter");
                 }
-                
+
                 // add empty strings
-                if (isString(key)&&key.trim()==="") {
-                    concat += key; 
+                if (isString(key) && key.trim() === "") {
+                    concat += key;
                     continue;
                 }
-                
+
                 if (!pf2.exists(key)) {
                     concat += key;
                     continue;
                 }
                 let v = pf2.getVia(key);
-                if(!isPrimitive(v)) {
+                if (!isPrimitive(v)) {
                     throw new Error("value is not primitive");
                 }
 
                 concat += v;
             }
-            
+
             return concat;
         case "path":
             key = args.shift();
@@ -491,6 +497,117 @@ function transform(value) {
 
             throw new Error("type not supported");
 
+            
+        case "map":
+            map = new Map();
+            while (args.length > 0) {
+                keyValue = args.shift();
+                if (keyValue === undefined) {
+                    throw new Error("missing key parameter");
+                }
+                
+                keyValue = keyValue.split("=");
+                map.set(keyValue[0], keyValue[1]);
+            }
+            
+            return map.get(value);
+            
+        case "timestamp":
+            date = new Date(value);
+            timestamp = date.getTime();
+            if (isNaN(timestamp)) {
+                throw new Error("invalid date");
+            }
+            return timestamp;
+
+        case "time":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            try {
+                locale = getLocaleOfDocument();
+                return date.toLocaleTimeString(locale);
+
+            } catch (e) {
+                throw new Error("unsupported locale or missing format (" + e.message + ")");
+            }
+
+
+        case "year":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getFullYear();
+
+        case "month":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getMonth() + 1;
+
+        case "day":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getDate();
+
+        case "weekday":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getDay();
+
+        case "hour":
+        case "hours":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getHours();
+
+        case "minute":
+        case "minutes":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getMinutes();
+
+        case "second":
+        case "seconds":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            return date.getSeconds();
+
+        case "date":
+            date = new Date(value);
+            if (isNaN(date.getTime())) {
+                throw new Error("invalid date");
+            }
+
+            try {
+                locale = getLocaleOfDocument();
+                return date.toLocaleDateString(locale);
+
+            } catch (e) {
+                throw new Error("unsupported locale or missing format (" + e.message + ")");
+            }
+
         case "i18n":
         case "translation":
             translations = getDocumentTranslations();
diff --git a/development/test/cases/data/transformer.mjs b/development/test/cases/data/transformer.mjs
index f2991d44755830e9383759b5eb98ca80df55ea22..1bb7aa2ffd66ff6ec9bb84a4704ec897b7b2e27d 100644
--- a/development/test/cases/data/transformer.mjs
+++ b/development/test/cases/data/transformer.mjs
@@ -27,6 +27,17 @@ describe('Transformer', function () {
     describe('Transformer.run()', function () {
 
         [
+            ['map:a=4:b=5:c=6', "a", "4"],
+            ['date', "2023-02-14", "14.2.2023"],
+            ['year', "2023-02-14", 2023],
+            ['month', "2023-02-14", 2],
+            ['day', "2023-02-14", 14],
+            ['weekday', "2023-02-14", 2],
+            ['minutes', "2023-02-14 06:12:21", 12],
+            ['seconds', "2023-02-14 06:12:21", 21],
+            ['hours', "2023-02-14 06:12:21", 6],
+            ['time', "2023-02-14 06:12:21", "06:12:21"],
+            ['timestamp', "2023-02-14", 1676332800000],
             ['concat:a.b.c:test:a.b.d', {a: {b: {c: 4, d: 6}}}, "4test6"],
             ['concat:a.b.c:\\ \\ :a.b.d', {a: {b: {c: 4, d: 6}}}, "4  6"],
             ['concat:a.b.c:,:a.b.d', {a: {b: {c: 4, d: 6}}}, "4,6"],