文档管理中心
API参考快应用API系统能力日历事件

日历事件

接口声明

在manifest.json文件的 features属性中增加如下配置。

收起
自动换行
深色代码主题
复制
  1. {"name": "system.calendar"}

导入模块

在调用接口页面的<script>部分增加如下配置。

收起
自动换行
深色代码主题
复制
  1. import calendar from '@system.calendar'

收起
自动换行
深色代码主题
复制
  1. var calendar = require("@system.calendar")

使用限制

展开

限制条件

说明

适用终端

手机、平板、车机

适用区域

全球

接口定义

展开

接口

描述

calendar.insert(OBJECT)

插入日历事件。

calendar.insert(OBJECT)

描述

插入日历事件。

OBJECT参数

展开

参数

类型

是否必填

说明

title

string

事件的标题。

description

string

事件的描述。

startDate

long

事件开始时间,以从公元纪年开始计算的协调世界时毫秒数表示。

endDate

long

事件结束时间,以从公元纪年开始计算的协调世界时毫秒数表示。

timezone

string

事件的时区。

allDay

boolean

  • true 表示此事件占用一整天(按照本地时区的定义)。
  • false 表示它是常规事件,可在一天内的任何时间开始和结束。

rrule

string

重复事件必须

事件的重复发生规则格式。例如:"FREQ=WEEKLY;COUNT=10;WKST=SU"。 您可以在此处找到更多示例。

remindMinutes

array

在事件开始前几分钟进行提醒。例如:[5,15,30]。

organizer

string

事件组织者(所有者)的电子邮件。

success

function

成功回调,值为插入成功的id(整型)。

fail

function

失败回调。

fail返回错误码:

展开

错误码

说明

201

用户拒绝,获取写日历权限失败。

202

参数非法,如输入时间格式不对、参数不符合标准。

示例代码

收起
自动换行
深色代码主题
复制
  1. calendar.insert({
  2. title:"事件A",
  3. startDate:"1490770543000",
  4. endDate:"1490880543000",
  5. remindMinutes:[5,15,30],
  6. rrule:"FREQ=WEEKLY;COUNT=2",
  7. success:function(data){console.log("handling success");}
  8. })

Demo

收起
自动换行
深色代码主题
复制
  1. <template>
  2. <!-- Only one root node is allowed in template. -->
  3. <div class="container">
  4. <!-- 标题 -->
  5. <div class="case-title mt-item">
  6. <text class="title">Title of an event</text>
  7. </div>
  8. <div class="mlr-container">
  9. <input onchange="inputChange('title')" class="input-big" placeholder="title"/>
  10. </div>
  11. <!-- 描述 -->
  12. <div class="case-title mt-item">
  13. <text class="title">Description about an event</text>
  14. </div>
  15. <div class="mlr-container">
  16. <input onchange="inputChange('des')" class="input-big" placeholder="description"/>
  17. </div>
  18. <!-- 开始时间 -->
  19. <div class="case-title mt-item">
  20. <text class="title">Start time of an event</text>
  21. </div>
  22. <div class="mlr-container">
  23. <picker value="{{startDate}}" onchange="pickerChange('startDate')" type="date" class="input-big"></picker>
  24. </div>
  25. <!-- 结束时间 -->
  26. <div class="case-title mt-item">
  27. <text class="title">End time of an event</text>
  28. </div>
  29. <div class="mlr-container">
  30. <picker value="{{endDate}}" onchange="pickerChange('endDate')" type="date" class="input-big"></picker>
  31. </div>
  32. <div class="mlr-container mt-item">
  33. <input onclick="insertEvent" type="button" value="Insert Calendar Event" class="btn-blue"/>
  34. </div>
  35. </div>
  36. </template>
  37. <style lang="sass">
  38. .container {
  39. flex-direction: column;
  40. padding-bottom: 50px;
  41. }
  42. .case-title {
  43. margin-left: 32px;
  44. margin-right: 32px;
  45. margin-bottom: 20px;
  46. flex-direction: column;
  47. }
  48. .mt-item {
  49. margin-top: 40px;
  50. }
  51. .input-big {
  52. width: 100%;
  53. background-color: #fff;
  54. height: 100px;
  55. border-radius: 50px;
  56. padding-left: 30px;
  57. font-size: 32px;
  58. }
  59. .mlr-container {
  60. margin-right:32px;
  61. margin-left:32px;
  62. }
  63. .btn-blue {
  64. background-color: #0faeff;
  65. width: 100%;
  66. height: 80px;
  67. border-radius: 40px;
  68. color: #fff;
  69. font-size: 32px;
  70. font-weight: 500;
  71. }
  72. </style>
  73. <script>
  74. import calendar from '@system.calendar';
  75. import prompt from '@system.prompt';
  76. export const strToDate = function (dateStr) {
  77. let splitArr = dateStr.split(' ');
  78. let dateArr = splitArr[0].split('-');
  79. let timeArr = splitArr[1] ? splitArr[1].split(':') : [];
  80. let newDate = new Date();
  81. newDate.setFullYear(dateArr[0]);
  82. newDate.setMonth(Number(dateArr[1]) - 1);
  83. newDate.setDate(dateArr[2]);
  84. newDate.setHours(timeArr[0] || 0, timeArr[1] || 0, timeArr[2] || 0, timeArr[3] || 0);
  85. return newDate;
  86. }
  87. export const lessTenFormat = function(num){
  88. if(isNaN(num) || num < 0)
  89. {
  90. return '';
  91. }
  92. let newNum = Number(num);
  93. return newNum >= 10 ? newNum : `0${num}`
  94. }
  95. module.exports = {
  96. public: {
  97. title:"",
  98. des:"",
  99. startDate:'',
  100. endDate:'',
  101. },
  102. onInit: function () {
  103. this.$page.setTitleBar({ text: 'Calendar Event' });
  104. let date = new Date();
  105. let year = date.getFullYear();
  106. let month = date.getMonth() + 1;
  107. let day = date.getDate();
  108. this.startDate = `${year}-${lessTenFormat(month)}-${lessTenFormat(day)}`;
  109. this.endDate = `${year}-${lessTenFormat(month)}-${lessTenFormat(day)}`;
  110. },
  111. inputChange(key,{value}){
  112. this[key] = value;
  113. },
  114. pickerChange(key,{year,month,day}){
  115. this[key] = `${year}-${lessTenFormat(Number(month) + 1)}-${lessTenFormat(day)}`;
  116. },
  117. insertEvent(){
  118. if(!this.title || !this.des || !this.startDate || !this.endDate)
  119. {
  120. return;
  121. }
  122. calendar.insert({
  123. title: this.title,
  124. description:this.des,
  125. startDate: strToDate(this.startDate).getTime(),
  126. endDate: strToDate(this.endDate).getTime(),
  127. success: function (data) {
  128. prompt.showToast({
  129. message: 'success',
  130. duration: 2000,
  131. gravity: 'bottom'
  132. })
  133. },
  134. fail:function(){
  135. prompt.showToast({
  136. message: 'fail',
  137. duration: 2000,
  138. gravity: 'bottom'
  139. })
  140. }
  141. })
  142. }
  143. }
  144. </script>

效果图如下:

在 API参考 中进行搜索
请输入您想要搜索的关键词