起因:
看到知乎的 【真香!自動同步ios的提醒事項和日歷,顯示日打卡內容】文章,試了試,確實很方便,可以再提醒事項里添加事項,日歷就會同步時間,
小缺陷:
對于沒有設定時間的提醒事項不會同步,因為常常只是想速記一些當日的小事情,而設定時間很麻煩,所以我修改了一下原文的腳本,下面的腳本里做了注釋標記,初寫代碼,還請大家多多指教,
升級后:
- 可以直接新建事項–>完成,不必設定時間【new】
- 在提醒事項里添加事項,日歷里就會同步
- 設定時間也可以的
- 都可以完成后顯示不同的完成圖示在loc里
- 使用方法與原版本會有一點小差別,主要體現在apple的快捷命令里何時觸發腳本,下面使用方法會說明【new】
使用方法:
-
在iphone或者ipad下載 scriptable
-
打開app,新建一個腳本,將本文最后的腳本檔案復制到里面
-
打開ios自帶的快捷指令app,點擊自動化—>創建個人自動化(或者右上角的加號)—>點擊【App】這里注意設定成當關閉提醒事項app時,如圖1—>點下一步添加操作—>選【App】scriptable的剛才保存的腳本檔案(沒設定標題是就是unitiled script那個檔案)—>注意在展開里把run in app 和運行時顯示給關閉,如圖2


-
重要的一步!!需要在日歷里面添加提醒事項串列名對應的日歷串列名,只需要創建想同步的串列,不想顯示在日歷上的待辦事項不需要創建串列,例如:我的提醒事項里有個【咩】串列,我的日歷里就要同樣創建一個【咩】日歷(點中間下面的日歷可以新建日歷,新建一個一樣名字的就可以)


-
然后就可以愉快的玩耍了,打開提醒事項后創建事項,再回到日歷里看:

腳本在這:
var dur_month = 1
const startDate = new Date()
startDate.setMonth(startDate.getMonth() - dur_month)
console.log(`日歷的開始時間 ${startDate.toLocaleDateString()}`)
const endDate = new Date()
endDate.setMonth(endDate.getMonth() + dur_month)
console.log(`日歷的結束時間 ${endDate.toLocaleDateString()}`)
// 【【【【【【【【直接找出全部的事項,因為沒有設定時間的事項老版本會被排除掉】】】】】】】】
const reminders = await Reminder.all()
console.log(`獲取 ${reminders.length} 條提醒事項`)
var calendar = await Calendar.forEvents()
var m_dict = {}
for(cal of calendar)
{
m_dict[cal.title] = cal
}
const events = await CalendarEvent.between(startDate, endDate, calendar)
console.log(`獲取 ${events.length} 條日歷`)
for (const reminder of reminders) {
const targetNote = `[Reminder] ${reminder.identifier}`
const [targetEvent] = events.filter(e => e.notes != null && (e.notes.indexOf(targetNote) != -1))
if(!m_dict[reminder.calendar.title])
{
console.warn("找不到日歷"+ reminder.calendar.title)
continue
}
if (targetEvent) {
console.log(`找到已經創建的事項 ${reminder.title}`)
updateEvent(targetEvent, reminder)
} else {
console.warn(`創建事項 ${reminder.title} 到 ${reminder.calendar.title}`)
const newEvent = new CalendarEvent()
newEvent.notes = targetNote + "\n" + reminder.notes//要加入備注
updateEvent(newEvent, reminder)
}
}
Script.complete()
function updateEvent(event, reminder) {
// 【【【【【【【【對于沒有設定時間的reminder,他與超時的還不一樣,他的duedate資料沒法直接設定,這里我只能退而求其次了,暫時沒有找到直接修改的辦法,】】】】】】】】
if (reminder.dueDate == null) {
var myDate = new Date();
myDate.setHours(myDate.getHours()+5);
reminder.dueDate = myDate;
}
event.title = `${reminder.title}`
cal_name = reminder.calendar.title
cal = m_dict[cal_name]
event.calendar = cal
if(reminder.isCompleted)
{
event.title = `?${reminder.title}`
event.isAllDay = false
event.startDate = reminder.completionDate
var ending = new Date(reminder.completionDate)
ending.setHours(ending.getHours()+1)
event.endDate = ending
var period = (reminder.dueDate-reminder.completionDate)/1000/3600/24
period = period.toFixed(1)
if(period < 0)
{
period = -period
event.location = " 延期" + period + "天完成"
}
else if (period == 0)
{
event.location = " 準時完成"
}
else
{
event.location = " 提前" + period + "天完成"
}
}
else{
const nowtime = new Date()
var period = (reminder.dueDate-nowtime)/1000/3600/24
period = period.toFixed(1)
if(period < 0)
{
flag = true
event.location = " 延期" + (-period) + "天"
if(reminder.dueDate.getDate() != nowtime.getDate())
{
event.title = `?${reminder.title}`
event.startDate = nowtime
event.endDate = nowtime
event.isAllDay = true
}
else
{
// 【【【【【【【【對于未設定具體時間的一定是超時的,所以如果是超時的就設定+5的時間】】】】】】】
event.title = `??${reminder.title}`
event.isAllDay = false
var newDate = new Date()
newDate.setHours(newDate.getHours()+5)
event.startDate = newDate
var ending = new Date(newDate)
ending.setHours(ending.getHours()+1)
event.endDate = ending
}
console.log(`【${reminder.title}】待辦順延${-period}天` )
}
else
{
event.title = `??${reminder.title}`
event.isAllDay = false
event.location = "還剩" + period + "天"
event.startDate = reminder.dueDate
var ending = new Date(reminder.dueDate)
ending.setHours(ending.getHours()+1)
event.endDate = ending
}
}
event.save()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/203127.html
標籤:AI
上一篇:JS中物件資料存盤
