Javascript 将日期字符串分离为JS对象
我正在构建一个日历,它接受来自RSS提要的JS对象输入。这个RSS提要是从我公司内部使用的CMS自动生成的。我无法更改CMS端的任何内容,也无法更改返回的RSS源。我所能访问的只是从该提要构建的对象 RSS提要将开始日期、结束日期、时间和标题合并在一个字符串中。我需要在我的对象中将它们分割成键,以便我的日历可以显示它们 我遇到的问题是,RSS提要会根据事件在CMS中的设置方式对字符串进行不同的格式设置。例如:Javascript 将日期字符串分离为JS对象,javascript,jquery,json,date,Javascript,Jquery,Json,Date,我正在构建一个日历,它接受来自RSS提要的JS对象输入。这个RSS提要是从我公司内部使用的CMS自动生成的。我无法更改CMS端的任何内容,也无法更改返回的RSS源。我所能访问的只是从该提要构建的对象 RSS提要将开始日期、结束日期、时间和标题合并在一个字符串中。我需要在我的对象中将它们分割成键,以便我的日历可以显示它们 我遇到的问题是,RSS提要会根据事件在CMS中的设置方式对字符串进行不同的格式设置。例如: "7/15/2013 8:00 PM - 9:00 PM Blah" //Date,
"7/15/2013 8:00 PM - 9:00 PM Blah" //Date, Time, Title
"7/12/2013 Blue" //Date for all day event, Title
"7/6/2013 8:00 AM - 7/23/2013 9:00 AM Banana" //Long event - Start Date, Start Time, End Date, End Time, Title
正如您所看到的,这些是多么不同,我很难决定如何将它们解析到我的对象中。对象应如下所示:
{
title: 'Banana',
start: new Date(2013, 7, 24, 10, 30),
end: new Date(2013, 7, 24, 11, 30),
allDay: false
}
我的问题归结为:什么是最好的方法?使用regex,尝试使用.indexOf(“/”)
之类的东西手动解析它,为每一个构建测试用例,或者其他一些建议
注:jQuery示例也是一个可以接受的答案。您能够使用类似的库吗 您可能希望在“-”上开始拆分(带空格)。如果你有一个部分,你知道这是一个全天的活动,有一个标题。如果是两个部分,你知道这是一个开始/结束事件,第二部分有一个标题。解析标题后,可以使用Datejs创建日期对象:
Date.parse('7/15/2013 8:00 PM')
从这里开始,您应该有足够的资源来构建JSON对象。根据Jon的回答,我的结论是:
parseEntries: function() {
//Rename to fit plugin requirements
for (var i = 0; i < Calendar.entries.length; i++) {
var entry = Calendar.entries[i];
//Rename
entry["url"] = entry["link"];
delete entry["link"];
var position = entry.title.indexOf(' - ');
if (position === -1) {
//All day event
entry.allDay = true;
var space = entry.title.indexOf(" "),
title = entry.title.substring(space + 1),
firstHalf = entry.title.slice(0, space); //Start date, no time because it's all day event
} else {
var firstHalf = entry.title.slice(0, position), //Start date/time
secondHalf = entry.title.substring(position + 3);
if (secondHalf.indexOf("AM") !== -1) {
var title = secondHalf.substring(secondHalf.indexOf("AM") + 3); //Title if has AM
} else {
var title = secondHalf.substring(secondHalf.indexOf("PM") + 3); //Title if has PM
}
secondHalf = secondHalf.slice(0, -(title.length + 1)); //End date/time
}
entry["start"] = firstHalf;
entry["end"] = secondHalf;
entry.title = title;
};
parseEntries:function(){
//重命名以符合插件要求
对于(var i=0;i
那不是JSON,那只是一个Javascript对象。你是在问如何用Javascript解析这些日期吗?@nullability是的。我混淆了我同时在做的另一个项目。更新了这个问题。好主意,这正是我需要开始的。-2007年Datejs.Alpha-1的1个,126个开放问题,自2年以来没有开发008.如果你想要一个能做到这一点并得到维护的库,那就看看吧。谢谢你的输入。我从来没有说过Datejs是最好的,或者说我在所有JavaScript日期库上都是最新的。没问题。只是要确保你知道。Datejs是个好主意,但他们放弃了。