我正在使用将事件添加到外部日历的open-source script。我还使用时刻来更改时间格式。
this.addToCalendar = createCalendar({
options: {
class: 'addtocal-btn',
id: 'event-' + this.item.id // You need to pass an ID. If you don't, one will be generated for you.
},
data: {
title: this.item.title, // Event title
start: new Date(this.calendarDate(this.item.start_date) + ' ' + moment(this.item.start_time, ["h:mm A"]).format("HH:mm")), // Event start date
end: new Date(this.calendarDate(this.item.end_date) + ' ' + moment(this.item.end_time, ["h:mm A"]).format("HH:mm")), // You can also choose to set an end time.
address: this.item.location,
description: this.item.description,
timezone: 'America/Detroit'
}
});
不幸的是,日期和时间在数据库中是分开的,因此我必须在Date()函数内部将两者串联起来。
示例开始日期为“ 2018-10-15 00:00:00”,而示例开始时间为“下午10:00”。因此,为什么我必须通过一个函数运行start_date并时刻运行start_time才能获得正确的格式。
// If 2018-10-15 00:00:00 is passed, returns 2018-10-15
calendarDate: function (value) {
var arr = value.split(' ');
return arr[0]
},
无论如何问题是,尽管在台式机浏览器上可以正常运行,但在移动浏览器上却无法运行。而且由于无法直接在移动设备上进行任何测试,因此无法直接诊断问题。
我已经能够将问题缩小到日期和时间的范围,但是我不知道为什么台式机浏览器会接受它,而移动浏览器却不接受(老兄,我已经在Safari中尝试过和iPhone6s Plus上的Chrome)
答案 0 :(得分:0)
因此,无论出于何种原因,移动浏览器似乎都不喜欢当前的.format(“ HH:mm”)。因此,我完全放弃了片刻,将AM / PM手动转换为24小时格式(使用代码from here):
convertTimeformat: function(time) {
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if (AMPM == "p.m." && hours < 12) hours = hours + 12;
if (AMPM == "a.m." && hours == 12) hours = hours - 12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if (hours < 10) sHours = "0" + sHours;
if (minutes < 10) sMinutes = "0" + sMinutes;
return sHours + ':' + sMinutes;
}
然后创建新的Date():
var start_datetime = moment(this.calendarDate(this.item.start_date) + ' ' + this.convertTimeformat(this.item.start_time));
var end_datetime = moment(this.calendarDate(this.item.end_date) + ' ' + this.convertTimeformat(this.item.end_time));
this.addToCalendar = createCalendar({
options: {
class: 'addtocal-btn',
id: 'event-' + this.item.id // You need to pass an ID. If you don't, one will be generated for you.
},
data: {
title: this.item.title,
start: new Date(start_datetime),
end: new Date(end_datetime),
address: this.item.location,
description: this.item.description,
timezone: 'America/Detroit'
}
});