Funktionen werden in [[Einführung in Bases|Bases]] verwendet, um Daten aus [[Eigenschaften]] in [[Ansichten#Filter|Filtern]] und [[Formeln]] zu manipulieren. Weitere Informationen zur Verwendung von Funktionen findest du in der [[Bases-Syntax|Bases-Syntax]]-Referenz.
Bases-Funktionen folgen dem JavaScript-Verhalten. Eine vollständige Referenzdokumentation findest du in den [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference).
Abgesehen von [[Funktionen#Global|Globalen]] Funktionen hängen die meisten Funktionen vom Typ des zu ändernden Wertes ab:
- [[Funktionen#Any-Typ|Any]]
- [[Funktionen#Date-Typ|Date]]
- [[Funktionen#String-Typ|String]]
- [[Funktionen#Number-Typ|Number]]
- [[Funktionen#List-Typ|List]]
- [[Funktionen#Link-Typ|Link]]
- [[Funktionen#File-Typ|File]]
- [[Funktionen#Object-Typ|Object]]
- [[Funktionen#Reguläre-Ausdrücke-Typ|Reguläre Ausdrücke]]
## Global
Globale Funktionen werden ohne einen Typ verwendet.
### `escapeHTML()`
`escapeHTML(html: string): string`
- Maskiert Sonderzeichen in einer Zeichenkette, um sie für die Einbindung in HTML sicher zu machen.
### `date()`
`date(date: string): date`
- `date(string): date` analysiert die übergebene Zeichenkette und gibt ein Datumsobjekt zurück.
- Die `date`-Zeichenkette sollte im Format `YYYY-MM-DD HH:mm:ss` vorliegen.
### `duration()`
`duration(value: string): duration`
- Analysiert eine Zeichenkette als Dauer. Siehe den Abschnitt [[Bases-Syntax#Datumsarithmetik|Datumsarithmetik]] für das Format der `value`-Zeichenkette.
- Explizites Analysieren ist bei der Datumsarithmetik nicht erforderlich (zum Beispiel `now() + '1d'`), aber bei der Arithmetik mit Dauern (zum Beispiel `now() + (duration('1d') * 2)`).
- Bei Arithmetik von Dauern mit Skalaren muss die Dauer links stehen. Zum Beispiel `duration('5h') * 2` statt `2 * duration('5h')`.
### `file()`
`file(path: string | file | url): file`
- Gibt ein Dateiobjekt für die angegebene Datei oder den Pfad zurück.
- Beispiel: `file(link("[[filename]]"))` oder `file("path to file")`.
### `html()`
`html(html: string): html`
- Wandelt eine Zeichenkette in ein Quelltext-Snippet um, das als HTML gerendert wird.
### `if()`
`if(condition: any, trueResult: any, falseResult?: any): any`
- `condition` ist der zu bewertende Ausdruck.
- `trueResult` ist die Ausgabe, wenn `condition` wahr ist.
- `falseResult` ist die optionale Ausgabe, wenn `condition` falsch ist. Wenn weggelassen, wird `null` als Standard verwendet.
- Gibt `trueResult` zurück, wenn `condition` wahr ist oder einen wahren Wert hat, andernfalls `falseResult`.
- Beispiel: `if(isModified, "Modified", "Unmodified")`
### `image()`
`image(path: string | file | url): image`
- Gibt ein Bildobjekt zurück, das das Bild in der Sicht rendert.
- Beispiel: `image(image-property)` oder `image("https://obsidian.md/images/obsidian-logo-gradient.svg")`.
### `icon()`
`icon(name: string): icon`
- Gibt einen Wert zurück, der in einer Sicht als Symbol gerendert wird. Der Symbolname muss einem unterstützten Lucide-Symbol entsprechen.
- Beispiel: `icon("arrow-right")`.
### `link()`
`link(path: string | file, display?: value): Link`
- Analysiert eine Zeichenkette `path` und gibt ein Link-Objekt zurück, das als Link zum angegebenen Pfad gerendert wird.
- Optional kann der Parameter `display` angegeben werden, um den Anzeigetext des Links festzulegen.
### `list()`
`list(element: any): List`
- Wenn das übergebene Element eine Liste ist, wird es unverändert zurückgegeben.
- Andernfalls wird das übergebene `element` in eine Liste verpackt, wodurch eine Liste mit einem einzelnen Element entsteht.
- Verwende diese Funktion, wenn eine Eigenschaft im Vault eine Mischung aus Zeichenketten oder Listen enthält.
- Beispiel: `list("value")` gibt `["value"]` zurück.
### `max()`
`max(value1: number, value2: number...): number`
- Gibt die größte aller übergebenen Zahlen zurück.
### `min()`
`min(value1: number, value2: number...): number`
- Gibt die kleinste aller übergebenen Zahlen zurück.
### `now()`
`now(): date`
- Gibt ein Datumsobjekt für den aktuellen Zeitpunkt zurück.
### `number()`
`number(input: any): number`
- Versucht, den übergebenen Wert als Zahl zurückzugeben.
- Gibt Datumsobjekte als Millisekunden seit der Unix-Epoche zurück.
- Gibt boolesche Werte als `1` oder `0` zurück.
- Analysiert Zeichenketten als Zahlen und gibt einen Fehler zurück, wenn die Zeichenkette keine gültige Zahl ist.
- Beispiel: `number("3.4")` gibt `3.4` zurück.
### `today()`
`today(): date`
- Gibt ein Datumsobjekt für das aktuelle Datum zurück. Der Zeitanteil wird auf Mitternacht gesetzt.
### `random()`
`random(): number`
- Gibt eine Zufallszahl zwischen 0 und 1 zurück.
- Die Zahlengenerierung wird bei jedem Laden einer Sicht aktualisiert. Das Navigieren zwischen Sichten ändert die Zufallszahl.
## Any-Typ
Funktionen, die mit jedem Wert verwendet werden können. Dazu gehören Zeichenketten (z. B. `"hello"`), Zahlen (z. B. `42`), Listen (z. B. `[1,2,3]`), Objekte und mehr.
### `isTruthy()`
`any.isTruthy(): boolean`
- Gibt den in einen booleschen Wert umgewandelten Wert zurück.
- Beispiel: `1.isTruthy()` gibt `true` zurück.
### `isType()`
`any.isType(type: string): boolean`
- Gibt true zurück, wenn der Wert vom angegebenen Typ ist.
- Beispiel: `"example".isType("string")` und `true.isType("boolean")` geben beide true zurück.
### `toString()`
`any.toString(): string`
- Gibt die Zeichenkettendarstellung eines beliebigen Wertes zurück.
- Beispiel: `123.toString()` gibt `"123"` zurück.
## Date-Typ
Funktionen, die mit einem Datum und einer Uhrzeit verwendet werden können, z. B. `date("2025-05-27")`. Datumsvergleiche können mit [[Bases-Syntax#Datumsarithmetik|Datumsarithmetik]] durchgeführt werden.
### Felder
Die folgenden Felder sind für Daten verfügbar:
| Feld | Typ | Beschreibung |
| ------------------ | -------- | ----------------------------------- |
| `date.year` | `number` | Das Jahr des Datums |
| `date.month` | `number` | Der Monat des Datums (1–12) |
| `date.day` | `number` | Der Tag des Monats |
| `date.hour` | `number` | Die Stunde (0–23) |
| `date.minute` | `number` | Die Minute (0–59) |
| `date.second` | `number` | Die Sekunde (0–59) |
| `date.millisecond` | `number` | Die Millisekunde (0–999) |
### `date()`
`date.date(): date`
- Gibt ein Datumsobjekt ohne Zeitanteil zurück.
- Beispiel: `now().date().format("YYYY-MM-DD HH:mm:ss")` gibt eine Zeichenkette wie "2025-12-31 00:00:00" zurück.
### `format()`
`date.format(format: string): string`
- `format` ist die Formatzeichenkette (z. B. `"YYYY-MM-DD"`).
- Gibt das Datum formatiert gemäß einer Moment.js-Formatzeichenkette zurück.
- Beispiel: `date.format("YYYY-MM-DD")` gibt `"2025-05-27"` zurück.
### `time()`
`date.time(): string`
- Gibt den Zeitanteil als Zeichenkette zurück.
- Beispiel: `now().time()` gibt eine Zeichenkette wie "23:59:59" zurück.
### `relative()`
`date.relative(): string`
- Gibt einen lesbaren Vergleich des Datums mit dem aktuellen Zeitpunkt zurück.
- Beispiel: `file.mtime.relative()` gibt einen Wert wie `3 days ago` zurück.
### `isEmpty()`
`date.isEmpty(): boolean`
- Gibt false zurück.
## String-Typ
Funktionen, die mit einer Zeichenfolge verwendet werden können, z. B. `"hello"`.
### Felder
| Feld | Typ | Beschreibung |
| --------------- | -------- | ------------------------------------------ |
| `string.length` | `number` | Die Anzahl der Zeichen in der Zeichenkette |
### `contains()`
`string.contains(value: string): boolean`
- `value` ist die zu suchende Teilzeichenkette.
- Gibt true zurück, wenn die Zeichenkette `value` enthält.
- Beispiel: `"hello".contains("ell")` gibt `true` zurück.
### `containsAll()`
`string.containsAll(...values: string): boolean`
- `values` sind eine oder mehrere zu suchende Teilzeichenketten.
- Gibt true zurück, wenn die Zeichenkette alle `values` enthält.
- Beispiel: `"hello".containsAll("h", "e")` gibt `true` zurück.
### `containsAny()`
`string.containsAny(...values: string): boolean`
- `values` sind eine oder mehrere zu suchende Teilzeichenketten.
- Gibt true zurück, wenn die Zeichenkette mindestens einen der `values` enthält.
- Beispiel: `"hello".containsAny("x", "y", "e")` gibt `true` zurück.
### `endsWith()`
`string.endsWith(query: string): boolean`
- `query` ist die am Ende zu prüfende Zeichenkette.
- Gibt true zurück, wenn die Zeichenkette mit `query` endet.
- Beispiel: `"hello".endsWith("lo")` gibt `true` zurück.
### `isEmpty()`
`string.isEmpty(): boolean`
- Gibt true zurück, wenn die Zeichenkette keine Zeichen hat oder nicht vorhanden ist.
- Beispiel: `"Hello world".isEmpty()` gibt `false` zurück.
- Beispiel: `"".isEmpty()` gibt `true` zurück.
### `lower()`
`string.lower(): string`
- Gibt die in Kleinbuchstaben umgewandelte Zeichenkette zurück.
### `replace()`
`string.replace(pattern: string | Regexp, replacement: string): string`
- `pattern` ist der in der Zielzeichenkette zu suchende Wert.
- `replacement` ist der Wert, durch den gefundene Muster ersetzt werden. Wenn `pattern` ein Regexp ist, können Erfassungsgruppen in `replacement` mit `$1`, `$2` usw. referenziert werden.
- Wenn `pattern` eine Zeichenkette ist, werden alle Vorkommen des Musters ersetzt.
- Wenn `pattern` ein Regexp ist, bestimmt das `g`-Flag, ob nur das erste oder alle Vorkommen ersetzt werden.
- Beispiel: `"a:b:c:d".replace(/:/, "-")` gibt `"a-b:c:d"` zurück, wohingegen `"a:b:c:d".replace(/:/g, "-")` `"a-b-c-d"` zurückgibt.
- Beispiel mit Erfassungsgruppen: `"John Smith".replace(/(\w+) (\w+)/, "$2, $1")` gibt `"Smith, John"` zurück.
### `repeat()`
`string.repeat(count: number): string`
- `count` ist die Anzahl der Wiederholungen der Zeichenkette.
- Beispiel: `"123".repeat(2)` gibt `"123123"` zurück.
### `reverse()`
`string.reverse(): string`
- Kehrt die Zeichenkette um.
- Beispiel: `"hello".reverse()` gibt `"olleh"` zurück.
### `slice()`
`string.slice(start: number, end?: number): string`
- `start` ist der inklusive Startindex.
- `end` ist der optionale exklusive Endindex.
- Gibt eine Teilzeichenkette von `start` (inklusiv) bis `end` (exklusiv) zurück.
- Beispiel: `"hello".slice(1, 4)` gibt `"ell"` zurück.
- Wenn `end` weggelassen wird, wird bis zum Ende der Zeichenkette geschnitten.
### `split()`
`string.split(separator: string | Regexp, n?: number): list`
- `separator` ist das Trennzeichen zum Aufteilen der Zeichenkette.
- `n` ist eine optionale Zahl. Wenn angegeben, enthält das Ergebnis die ersten `n` Elemente.
- Gibt eine Liste von Teilzeichenketten zurück.
- Beispiel: `"a,b,c,d".split(",", 3)` oder `"a,b,c,d".split(/,/, 3)` gibt `["a", "b", "c"]` zurück.
### `startsWith()`
`string.startsWith(query: string): boolean`
- `query` ist die am Anfang zu prüfende Zeichenkette.
- Gibt true zurück, wenn die Zeichenkette mit `query` beginnt.
- Beispiel: `"hello".startsWith("he")` gibt `true` zurück.
### `title()`
`string.title(): string`
- Wandelt die Zeichenkette in Titelschreibweise um (erster Buchstabe jedes Wortes wird großgeschrieben).
- Beispiel: `"hello world".title()` gibt `"Hello World"` zurück.
### `trim()`
`string.trim(): string`
- Entfernt Leerzeichen an beiden Enden der Zeichenkette.
- Beispiel: `" hi ".trim()` gibt `"hi"` zurück.
## Number-Typ
Funktionen, die mit numerischen Werten verwendet werden können, z. B. `42`, `3.14`.
### `abs()`
`number.abs(): number`
- Gibt den Absolutwert der Zahl zurück.
- Beispiel: `(-5).abs()` gibt `5` zurück.
### `ceil()`
`number.ceil(): number`
- Rundet die Zahl auf die nächste ganze Zahl auf.
- Beispiel: `(2.1).ceil()` gibt `3` zurück.
### `floor()`
`number.floor(): number`
- Rundet die Zahl auf die nächste ganze Zahl ab.
- Beispiel: `(2.9).floor()` gibt `2` zurück.
### `isEmpty()`
`number.isEmpty(): boolean`
- Gibt true zurück, wenn die Zahl nicht vorhanden ist.
- Beispiel: `5.isEmpty()` gibt `false` zurück.
### `round()`
`number.round(digits: number): number`
- Rundet die Zahl auf die nächste ganze Zahl.
- Optional kann ein `digits`-Parameter angegeben werden, um auf diese Anzahl von Dezimalstellen zu runden.
- Beispiel: `(2.5).round()` gibt `3` zurück, und `(2.3333).round(2)` gibt `2.33` zurück.
### `toFixed()`
`number.toFixed(precision: number): string`
- `precision` ist die Anzahl der Dezimalstellen.
- Gibt eine Zeichenkette mit der Zahl in Festkommanotation zurück.
- Beispiel: `(3.14159).toFixed(2)` gibt `"3.14"` zurück.
## List-Typ
Funktionen, die mit einer geordneten Liste von Elementen verwendet werden können, z. B. `[1, 2, 3]`.
### Felder
| Feld | Typ | Beschreibung |
| ------------- | -------- | ------------------------------------- |
| `list.length` | `number` | Die Anzahl der Elemente in der Liste |
### `contains()`
`list.contains(value: any): boolean`
- `value` ist das zu suchende Element.
- Gibt true zurück, wenn die Liste `value` enthält.
- Beispiel: `[1,2,3].contains(2)` gibt `true` zurück.
### `containsAll()`
`list.containsAll(...values: any): boolean`
- `values` sind ein oder mehrere zu suchende Elemente.
- Gibt true zurück, wenn die Liste alle `values` enthält.
- Beispiel: `[1,2,3].containsAll(2,3)` gibt `true` zurück.
### `containsAny()`
`list.containsAny(...values: any): boolean`
- `values` sind ein oder mehrere zu suchende Elemente.
- Gibt true zurück, wenn die Liste mindestens eines der `values` enthält.
- Beispiel: `[1,2,3].containsAny(3,4)` gibt `true` zurück.
### `filter()`
`list.filter(value: Boolean): list`
- Filtert die Liste und behält nur Elemente, bei denen der Ausdruck wahr ist.
- `value` ist der Wert eines Elements in der Liste.
- `index` ist der Index des aktuellen Werts.
- Beispiel: `[1,2,3,4].filter(value > 2)` gibt `[3,4]` zurück.
### `flat()`
`list.flat(): list`
- Flacht eine verschachtelte Liste in eine einzelne Liste ab.
- Beispiel: `[1,[2,3]].flat()` gibt `[1,2,3]` zurück.
### `isEmpty()`
`list.isEmpty(): boolean`
- Gibt true zurück, wenn die Liste keine Elemente hat.
- Beispiel: `[1,2,3].isEmpty()` gibt `false` zurück.
### `join()`
`list.join(separator: string): string`
- `separator` ist die Zeichenkette, die zwischen den Elementen eingefügt wird.
- Verbindet alle Listenelemente zu einer einzelnen Zeichenkette.
- Beispiel: `[1,2,3].join(",")` gibt `"1,2,3"` zurück.
### `map()`
`list.map(value: Any): list`
- Transformiert jedes Element der Liste mithilfe eines Ausdrucks.
- `value` ist der Wert eines Elements in der Liste.
- `index` ist der Index des aktuellen Werts.
- Beispiel: `[1,2,3,4].map(value + 1)` gibt `[2,3,4,5]` zurück.
### `reduce()`
`list.reduce(expression: Any, acc: Any): Any`
- Reduziert die Liste auf einen einzelnen Wert, indem für jedes Element ein Ausdruck ausgeführt wird. Der Ausdruck muss den nächsten Wert von `acc` zurückgeben. Verwende `value` für das aktuelle Element, `index` für dessen Position und `acc` für das bisherige akkumulierte Ergebnis.
- `expression` wird für jedes Element in der Liste ausgewertet.
- `value` ist der Wert des aktuellen Elements in der Liste.
- `index` ist der Index des aktuellen Elements.
- `acc` ist der bisher akkumulierte Wert.
- Beispiel (Summe): `[1,2,3].reduce(acc + value, 0)` gibt `6` zurück.
- Beispiel (Maximum): `values.filter(value.isType("number")).reduce(if(acc == null || value > acc, value, acc), null)` gibt die größte Zahl zurück, oder `null`, wenn keine vorhanden ist.
### `reverse()`
`list.reverse(): list`
- Kehrt die Liste um.
- Beispiel: `[1,2,3].reverse()` gibt `[3,2,1]` zurück.
### `slice()`
`list.slice(start: number, end?: number): list`
- `start` ist der inklusive Startindex.
- `end` ist der optionale exklusive Endindex.
- Gibt eine flache Kopie eines Teils der Liste von `start` (inklusiv) bis `end` (exklusiv) zurück.
- Beispiel: `[1,2,3,4].slice(1,3)` gibt `[2,3]` zurück.
- Wenn `end` weggelassen wird, wird bis zum Ende der Liste geschnitten.
### `sort()`
`list.sort(): list`
- Sortiert Listenelemente vom kleinsten zum größten.
- Beispiel: `[3, 1, 2].sort()` gibt `[1, 2, 3]` zurück.
- Beispiel: `["c", "a", "b"].sort()` gibt `["a", "b", "c"]` zurück.
### `unique()`
`list.unique(): list`
- Entfernt doppelte Elemente.
- Beispiel: `[1,2,2,3].unique()` gibt `[1,2,3]` zurück.
## Link-Typ
Funktionen, die auf einen Link angewendet werden können. Links können aus einer Datei (`file.asLink()`) oder einem Pfad (`link("path")`) erstellt werden.
### `asFile()`
`link.asFile(): file`
- Gibt ein Dateiobjekt zurück, wenn der Link auf eine gültige lokale Datei verweist.
- Beispiel: `link("[[filename]]").asFile()`.
### `linksTo()`
`link.linksTo(file): boolean`
- Gibt `true` zurück, wenn die durch `link` dargestellte Datei einen Link zu `file` hat.
## File-Typ
Funktionen, die mit einer Datei im Vault verwendet werden können.
### Felder
Die folgenden Felder sind für Dateien verfügbar:
| Feld | Typ | Beschreibung |
| ----------------- | -------- | ------------------------------------------------------------- |
| `file.name` | `string` | Der Name dieser Datei. |
| `file.basename` | `string` | Der Name dieser Datei ohne Dateiendung. |
| `file.path` | `string` | Der vollständige Pfad zu dieser Datei, relativ zum Vault-Stammverzeichnis. |
| `file.folder` | `string` | Der vollständige Pfad zum übergeordneten Ordner. |
| `file.ext` | `string` | Die Dateiendung dieser Datei. |
| `file.size` | `number` | Die Größe dieser Datei in Bytes. |
| `file.properties` | `object` | Die Notiz-Eigenschaften dieser Datei. |
| `file.tags` | `list` | Die Tags dieser Datei. Beinhaltet Inline-Tags. |
| `file.links` | `list` | Die internen Links innerhalb dieser Datei. |
| `file.ctime` | `date` | Zeitstempel der Erstellung dieser Datei. |
| `file.mtime` | `date` | Zeitstempel der letzten Änderung dieser Datei. |
### `asLink()`
`file.asLink(display?: string): Link`
- `display` ist ein optionaler Anzeigetext für den Link.
- Gibt ein Link-Objekt zurück, das als funktionierender Link gerendert wird.
- Beispiel: `file.asLink()`
### `hasLink()`
`file.hasLink(otherFile: file | string): boolean`
- `otherFile` ist ein anderes Dateiobjekt oder ein Zeichenkettenpfad zur Prüfung.
- Gibt true zurück, wenn `file` auf `otherFile` verlinkt.
- Beispiel: `file.hasLink(otherFile)` gibt `true` zurück, wenn es einen Link von `file` zu `otherFile` gibt.
### `hasProperty()`
`file.hasProperty(name: string): boolean`
- Gibt `true` zurück, wenn die Datei die angegebene Eigenschaft hat.
### `hasTag()`
`file.hasTag(...values: string): boolean`
- `values` sind ein oder mehrere Tag-Namen.
- Gibt true zurück, wenn die Datei einen der Tags in `values` hat.
- Beispiel: `file.hasTag("tag1", "tag2")` gibt `true` zurück, wenn die Datei den Tag `#tag1` oder `#tag2` hat. Dies schließt auch [[Tags#Verschachtelte Tags|verschachtelte Tags]] ein, wie `#tag1/a` oder `#tag2/b`.
### `inFolder()`
`file.inFolder(folder: string): boolean`
- `folder` ist der zu prüfende Ordnername.
- Gibt true zurück, wenn sich die Datei im angegebenen Ordner oder einem seiner Unterordner befindet.
- Beispiel: `file.inFolder("notes")` gibt `true` zurück.
## Object-Typ
Funktionen, die mit einer Sammlung von Schlüssel-Wert-Paaren verwendet werden können, z. B. `{"a": 1, "b": 2}`.
### `isEmpty()`
`object.isEmpty(): boolean`
- Gibt true zurück, wenn das Objekt keine eigenen Eigenschaften hat.
- Beispiel: `{}.isEmpty()` gibt `true` zurück.
### `keys()`
`object.keys(): list`
- Gibt eine Liste zurück, die die Schlüssel des Objekts enthält.
### `values()`
`object.values(): list`
- Gibt eine Liste zurück, die die Werte des Objekts enthält.
## Reguläre-Ausdrücke-Typ
Funktionen, die mit einem regulären Ausdrucksmuster verwendet werden können. Beispiel: `/abc/`.
### `matches()`
`regexp.matches(value: string): boolean`
- `value` ist die zu testende Zeichenkette.
- Gibt true zurück, wenn der reguläre Ausdruck mit `value` übereinstimmt.
- Beispiel: `/abc/.matches("abcde")` gibt `true` zurück.