Skip to content

Instantly share code, notes, and snippets.

@dannberg
Last active June 29, 2025 09:03
Show Gist options
  • Save dannberg/48ea2ba3fc0abdf3f219c6ad8bc78eb6 to your computer and use it in GitHub Desktop.
Save dannberg/48ea2ba3fc0abdf3f219c6ad8bc78eb6 to your computer and use it in GitHub Desktop.
Dann Berg's Daily Note Template for Obsidian. Uses Dataview & Templater plugins. Should be saved as a Markdown file in Obsidian. Read the full tour: https://dannb.org/blog/2022/obsidian-daily-note-template/
---
created: <% tp.file.creation_date() %>
---
tags:: [[+Daily Notes]]
# <% moment(tp.file.title,'YYYY-MM-DD').format("dddd, MMMM DD, YYYY") %>
<< [[Timestamps/<% tp.date.now("YYYY", -1) %>/<% tp.date.now("MM-MMMM", -1) %>/<% tp.date.now("YYYY-MM-DD-dddd", -1) %>|Yesterday]] | [[Timestamps/<% tp.date.now("YYYY", 1) %>/<% tp.date.now("MM-MMMM", 1) %>/<% tp.date.now("YYYY-MM-DD-dddd", 1) %>|Tomorrow]] >>
---
### πŸ“… Daily Questions
##### 🌜 Last night, after work, I...
-
##### πŸ™Œ One thing I'm excited about right now is...
-
##### πŸš€ One+ thing I plan to accomplish today is...
- [ ]
##### πŸ‘Ž One thing I'm struggling with today is...
-
---
# πŸ“ Notes
- <% tp.file.cursor() %>
---
### Notes created today
```dataview
List FROM "" WHERE file.cday = date("<%tp.date.now("YYYY-MM-DD")%>") SORT file.ctime asc
```
### Notes last touched today
```dataview
List FROM "" WHERE file.mday = date("<%tp.date.now("YYYY-MM-DD")%>") SORT file.mtime asc
```
@Pdfulkar
Copy link

Pdfulkar commented Apr 4, 2025

now recently Found out that the yesterday and Tomorrow buttons are giving totally wrong data specifically it is giving same date for each button
Screenshot 2025-04-04 162644

@victorwoo
Copy link

This version of the template has issues when used in conjunction with obsidian-calendar-plugin.

The Calendar plugin allows users to click on any date in the calendar to create a diary entry for that day. This is very convenient for busy people to backfill their diary entries from the previous day. In such cases, using tp.date.now() no longer represents the intended time.

The only reliable source of the date string is the file name. Whether using the default Daily Notes or the Calendar plugin, the file names of the notes they create are the target dates we want.

Assuming we set the Date format in the settings of the Daily Notes plugin to "YYYY-MM-DD", the template can be designed as follows:

<%*
const fileDateStr = tp.file.title;
const fileMoment = window.moment(fileDateStr, "YYYY-MM-DD");
%># <% fileDateStr %>

<< [[<% fileMoment.clone().subtract(1, 'day').format("YYYY-MM-DD") %>|Yesterday]] | [[<% fileMoment.clone().add(1, 'day').format("YYYY-MM-DD") %>|Tomorrow]] >>

@aaccioly
Copy link

I had the same problem described by @Pdfulkar and @victorwoo on ephemeral notes as well.
A good solution is to adapt Victor's approach to add the journaling date to the frontmatter.

E.g.:

---
created: <% tp.file.creation_date() %>
<%*
const journalDate = window.moment(tp.file.title, "YYYY-MM-DD");
%>
journal-date: <% journalDate.format("YYYY-MM-DD") %>
---

Then you can use the Dataview JavaScript API to retrieve ephemeral notes. This also allows you to completely skip the ephemeral note headers when you haven't created or modified any notes on that day.

```dataviewjs
const journalDate = dv.current().file.frontmatter["journal-date"];

const created = dv.pages()
  .where(p => p.file.cday.toISODate() === journalDate)
  .sort(p => p.file.ctime, 'asc');

const modified = dv.pages()
  .where(p => p.file.mtime.toISODate() === journalDate)
  .sort(p => p.file.mtime, 'asc');

if (created.length > 0 || modified.length > 0) {
  dv.span("---");
}

if (created.length > 0) {
  dv.header(2, "Notes created today");
  dv.list(created.map(p => p.file.link));
}

if (modified.length > 0) {
  dv.header(2, "Notes last touched today");
  dv.list(modified.map(p => p.file.link));
}
```

You can also adapt Victor's example above for navigation:

<< [[<% journalDate.clone().subtract(1, 'day').format("YYYY-MM-DD-dddd") %>|Yesterday]] | [[<% journalDate.clone().add(1, 'day').format("YYYY-MM-DD-dddd") %>|Tomorrow]] >>

But I'm a huge fan of the Journals plugin, which makes navigation as simple as:

```journal-nav

```

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment