0

RSS フィードから JS オブジェクトを入力するカレンダーを作成しています。この RSS フィードは、社内で使用されている CMS から自動的に生成されます。CMS 側も、返された RSS フィードも変更できません。私がアクセスできるのは、そのフィードから構築されたオブジェクトだけです。

RSS フィードは、開始日、終了日、時間、およびタイトルをすべて 1 つの文字列に結合します。カレンダーに表示できるように、オブジェクト内のキーに分割する必要があります。

私が直面している問題は、CMS でイベントがどのように設定されているかによって、RSS フィードが文字列を異なる形式でフォーマットすることです。例えば:

"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
}

私の質問は次のとおりです。これにアプローチする最良の方法は何ですか? 正規表現を使用し、手動で解析してみたり.indexOf("/")、それぞれのテスト ケースを作成したり、その他の提案を行ったりします。

PS: jQuery の例も受け入れられる回答です。

4

2 に答える 2

0

ジョンの答えに基づいて、これは私が最終的に得たものです:

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;
    };
于 2013-07-12T18:07:14.423 に答える