使用AppleScript(JavaScript)给iMac日历添加事件失败求助
JXA给Mac日历添加日程的问题解决
问题描述
用户使用JavaScript for Automation(JXA)尝试给Mac的「日历.app」添加全天日程,编写代码后未实现功能,代码如下:
var app = Application("カレンダー") app.activate() var today1 = new Date() var event = app.Event({ description: "test", startDate: today1, alldayEvent: true })
打印出的事件对象信息:
app.Event({"description":"test", "startDate":Wed Dec 28 2022 17:03:03 GMT+0900 (JST), "alldayEvent":true, "make":[function anonymous]})
疑问:事件对象是否创建成功?如何将事件添加到日历?
解答
1. 事件对象已成功创建
从输出可以确认,你已经在内存中创建了一个有效的Event实例,但这个对象还没有关联到日历的具体日历列表,所以不会在日历.app中显示。
2. 解决办法:将事件添加到指定日历
JXA中创建事件后,必须把它添加到某个具体的日历容器(比如「我的日历」)才能生效,修改代码如下:
var app = Application("カレンダー") app.activate() var today1 = new Date() // 创建事件对象,可补充标题(summary)字段,默认为空 var event = app.Event({ summary: "测试全天日程", description: "test", startDate: today1, alldayEvent: true }) // 将事件添加到第一个日历(通常是默认的「我的日历」) app.calendars[0].events.push(event)
额外优化建议
- 指定特定日历:如果不想用第一个日历,可以通过名称查找目标日历:
// 找到名为「工作」的日历并添加事件 var targetCalendar = app.calendars.whose({name: "工作"})[0] targetCalendar.events.push(event)
- 修正全天事件的日期:为避免时区问题,建议将全天事件的
startDate设置为当天0点:
var today = new Date() var startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate())
内容的提问来源于stack exchange,提问作者yukiyuki
相关产品推荐
相关产品推荐

