【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间

起因:

看到知乎的 【真香!自动同步ios的提醒事项和日历,显示日打卡内容】文章,试了试,确实很方便,可以再提醒事项里添加事项,日历就会同步时间。

小缺陷:

对于没有设置时间的提醒事项不会同步,因为常常只是想速记一些当日的小事情,而设置时间很麻烦。所以我修改了一下原文的脚本。下面的脚本里做了注释标记,初写代码,还请大家多多指教。

升级后:

  1. 可以直接新建事项–>完成,不必设置时间【new】
  2. 在提醒事项里添加事项,日历里就会同步
  3. 设置时间也可以的
  4. 都可以完成后显示不同的完成图标在loc里
  5. 使用方法与原版本会有一点小差别,主要体现在apple的快捷命令里何时触发脚本,下面使用方法会说明【new】

使用方法:

  1. 在iphone或者ipad下载 scriptable

  2. 打开app,新建一个脚本,将本文最后的脚本文件复制到里面

  3. 打开ios自带的快捷指令app,点击自动化—>创建个人自动化(或者右上角的加号)—>点击【App】这里注意设置成当关闭提醒事项app时,如图1—>点下一步添加操作—>选【App】scriptable的刚才保存的脚本文件(没设置标题是就是unitiled script那个文件)—>注意在展开里把run in app 和运行时显示给关闭,如图2
    【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间_第1张图片
    【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间_第2张图片

  4. 重要的一步!!需要在日历里面添加提醒事项列表名对应的日历列表名,只需要创建想同步的列表,不想显示在日历上的待办事项不需要创建列表。例如:我的提醒事项里有个【咩】列表,我的日历里就要同样创建一个【咩】日历(点中间下面的日历可以新建日历,新建一个一样名字的就可以)
    【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间_第3张图片
    【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间_第4张图片

  5. 然后就可以愉快的玩耍了,打开提醒事项后创建事项,再回到日历里看:
    【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间_第5张图片

脚本在这:

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()
}

你可能感兴趣的:(关于ios的一系列有趣的事情,ios,javascript,脚本语言,办公软件)