大家好你们都知道如何将活动保存为谷歌日历或ICal?场景是我有开始和结束日期以及事件的标题。如果我点击按钮,它应该通过谷歌日历保存或打开浏览器并保存该事件。我尝试了jquery.icalendar,但没有运气,仅用于Jquery V1.1.1。现在我使用jQuery v3.2.1你们中的任何人都知道如何在没有使用jquery.icalendar的情况下这样做,如果可能的话已经过时了。
编辑: 想要实现类似this我现在正在使用它,但有没有办法在没有这个插件的情况下自己创建代码
答案 0 :(得分:0)
这似乎是一个有趣的挑战,所以我花了很多时间来看看我能做些什么。我强烈建议使用库或PHP,以便所有格式都能正确保留。
以下是您尝试的一种方式:
示例代码:https://jsfiddle.net/Twisty/6sye1f75/
<强>的JavaScript 强>
var eventData = {
"title": "ebay live auction test",
"desc": "this is a live auction test \n testing new line.",
"location": "my house",
"url": "http://www.ebay.com",
"time": {
"start": "March 12, 2014 14:00:00",
"end": "march 13, 2014 15:30:00",
"zone": "-07:00",
"allday": false
},
};
$(function() {
function adjustToUTC(dateObj, zone) {
var dateOut = new Date(dateObj),
hours, mins;
if (isNaN(dateOut.getTime())) {
return new Date();
}
// adjust to UTC
hours = zone.substring(1, 3);
mins = zone.substring(4, 6);
if (zone.substring(0, 1) === '-') {
dateOut.setHours(dateOut.getHours() + (hours - 0));
dateOut.setMinutes(dateOut.getMinutes() + (mins - 0));
} else {
dateOut.setHours(dateOut.getHours() - hours);
dateOut.setMinutes(dateOut.getMinutes() - mins);
}
return dateOut;
}
function getDatePart(part, digits) {
part = part.toString();
while (part.length < digits) {
part = '0' + part;
}
return part;
}
function getUTCTime(dateObj) {
var newDateObj = adjustToUTC(dateObj, eventData.time.zone);
return getDatePart(newDateObj.getFullYear(), 4) + getDatePart(newDateObj.getMonth() + 1, 2) + getDatePart(newDateObj.getDate(), 2) + 'T' + getDatePart(newDateObj.getHours(), 2) + getDatePart(newDateObj.getMinutes(), 2) + getDatePart(newDateObj.getSeconds(), 2) + 'Z';
}
function prepareEvent(data) {
var tData = "";
tData += "BEGIN:VCALANDER\r\n";
tData += "VERSION:2.0\r\n";
tData += "METHOD:PUBLISH\r\n";
tData += "BEGIN:VEVENT\r\n";
tData += "SUMMARY:" + data.title + "\r\n";
tData += "DESCRIPTION:" + data.desc + "\r\n";
tData += "LOCATION:" + data.location + "\r\n";
tData += "URL:" + data.url + "\r\n";
tData += "UID:00" + Math.floor(Math.random() * 10000000) + "-Custom@test\r\n";
tData += "SEQUENCE:0\r\n";
tData += "DTSTAMP:" + getUTCTime(data.time.start) + "\r\n";
tData += "DTSTART:" + getUTCTime(data.time.start) + "\r\n";
tData += "DTEND:" + getUTCTime(data.time.end) + "\r\n";
tData += "END:VEVENT\r\n";
tData += "END:VCALENDAR\r\n";
return tData;
}
$(".show-event.ics pre").html(prepareEvent(eventData));
$.each(eventData, function(k, v) {
var item = $("<li>");
if (k !== "time") {
item.append($("<label>").html(k + ":"));
item.append($("<span>").html(v));
} else {
item.append($("<label>").html(k + ":"));
item.append($("<ul>"));
item.find("ul").append($("<li>").append($("<label>").html("start:")).append($("<span>").html(v.start + " (" + v.zone + ")")));
item.find("ul").append($("<li>").append($("<label>").html("end:")).append($("<span>").html(v.end + " (" + v.zone + ")")));
}
$(".show-event.html ul").append(item);
});
$(".controlgroup").controlgroup();
$("#save-event").click(function(e) {
var contents = prepareEvent(eventData);
var name = eventData.title.replace(/ /g, "_") + ".ics";
$(this)[0].download = name;
$(this).attr("href", "data:text/calendar;" + encodeURIComponent(content));
console.log($(this));
return true;
});
});
参考:
我还从这里收集了一些功能:jQuery AddCalEvent Plugin Demos。
由于它的工作方式,无法在jsfiddle中进行测试。我可以将它移动到plnkr或codepen以查看它是否在那里工作。