# Bases : quelques formules utiles
[Bases](https://help.obsidian.md/bases) est un plugin de base dans Obsidian. Il permet de **créer des vues de type bases de données**. À l'aide d'une base, vous pouvez **afficher**, **modifier**, **trier** et **filtrer** vos notes en vous basant sur leurs [propriétés](https://help.obsidian.md/properties).
Dans cet article, je référence quelques **formules personnalisées** utiles pour adapter l'affichage des propriétés.
## Créer un lien personnalisé
Créer un lien vers un fichier ou une URL externe, j'utilise la fonction `link()`.
Syntaxe : `link(string | file , display text | any ? img | emoji | any ?)`
Par exemple pour créer un lien hypertexte "More…" qui ouvre un fichier :
```
link(file.path,"More...")
```
Pour afficher un émoji cliquable [🔗](https://mypkb.fr/Home)vers [mypkb.fr](https://mypkb.fr/Home) j'utilise la syntaxe suivante :
```
link("https://mypkb.fr/Home","🔗")
```
## Découper une chaine
Pour récupérer une portion d'une chaine présente dans une propriété. Je peux diviser en plusieurs morceaux ou couper une partie.
### Diviser une chaine plusieurs parts
La fonction `split()` permet de diviser une chaine en parts et de la **convertir en liste**. Par exemple pour découper une URL sur la base du symbole `/` permet ensuite de manipuler les différents éléments de la liste.
Syntaxe : `string.split(separator: string | Regexp, n?: number)`
Exemple : Si propriété `url_properties` contient une chaine sous la forme `https://mypkb.fr/Home`.
Pour afficher uniquement le FQDN `mypkb.fr`, la fonction `split()` doit utiliser le séparateur `/` afin de découper la chaine en 4 morceaux de `[0]` à `[3]` et on affiche uniquement l'élément `[2]` en sortie :
```
url_properties.split("/")[2]
```
Pour connaitre le nombre d'éléments total, utilisez la fonction `length`. Dans l'exemple précédent, la commande retournerait la valeur `4` :
```
url_properties.split("/").length
```
### Supprimer une partie (slice)
La fonction `slice()` permet de couper une partie d'une chaine. Par exemple, La propriété `date_propertie` contient la valeur `2025-10-17T16:11:21+02:00`.
Pour supprimer la partie UTC d'une date au format [[memo-dates-iso-8601|ISO 8601]] je dois supprimer tout ce qui se situe après le 19ᵉ caractère :
```
date_propertie.slice(0, 19)
```
## Manipulation des dates et durée
Savoir depuis combien de temps est créée une note :
```
file.ctime.date() - now()
```
Convertir une date [[memo-dates-iso-8601|ISO 8601]] en date standard au format `yyyy/MM/DD hh:mm` :
```
date(iso_date_propertie.slice(0, 19)).format("yyyy/MM/DD hh:mm")
```
Calculer la durée entre `now()` et une chaine au format date [[memo-dates-iso-8601|ISO 8601]] :
- On supprime la partie UTC de la date
- On utilise la fonction `date()` pour convertir la chaine en date
- On calcule la différence entre `now()` et la date récupérée.
```
date(share_updated.slice(0, 19)) - now ()
```
## Valeur conditionnelle
La fonction `if()` permet de modifier l'affichage d'une propriété selon une condition :
Syntaxe : `if(condition: any, trueResult: any, falseResult?: any)`
Par exemple, si la propriété `title` existe, l'utiliser pour créer un lien vers la note, sinon utiliser le nom de la note.
```
if(title,link(file.path,title),link(file.path,file.name))
```