Skip to content

Instantly share code, notes, and snippets.

@HananoshikaYomaru
Last active January 31, 2024 10:31
Show Gist options
  • Save HananoshikaYomaru/f2ea4107478fbf9d7e4690712ebc36e9 to your computer and use it in GitHub Desktop.
Save HananoshikaYomaru/f2ea4107478fbf9d7e4690712ebc36e9 to your computer and use it in GitHub Desktop.
life calendar in obsidian using dataview js
/* wide */
.wide .markdown-preview-sizer {
max-width: unset !important;
}
.life-calendar p a.internal-link {
display: inline-block;
}
function getWeekNumber(d) {
d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
const weekNo = Math.ceil((((d.valueOf() - yearStart.valueOf()) / 86400000) + 1) / 7);
return [d.getUTCFullYear(), weekNo];
}
function isPastWeek(date) {
const now = new Date();
const [currentYear, currentWeek] = getWeekNumber(now);
const [dateYear, dateWeek] = getWeekNumber(date);
return dateYear < currentYear || (dateYear === currentYear && dateWeek <= currentWeek);
}
function getString(startDate, years) {
const startDateObj = new Date(startDate);
const endDate = new Date(new Date(startDate).setFullYear(startDateObj.getFullYear() + years));
let result = '';
let currentDate = new Date(startDateObj);
const weekSet = new Set();
while (currentDate <= endDate) {
const [year, weekNo] = getWeekNumber(currentDate);
const weekString = `${year}-W${weekNo}`;
if (!weekSet.has(weekString)) {
weekSet.add(weekString);
result += `[[${weekString}| ${isPastWeek(currentDate) ? '🟢' : '◻️'}]]`;
}
currentDate.setDate(currentDate.getDate() + 1); // Increment day by day
}
return result;
}
dv.paragraph(getString("1999-08-27", 80));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment