Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当WeekView包装两个不同的月份时,在FullCalendar中仅显示一个月份名称_Javascript_Fullcalendar_Momentjs - Fatal编程技术网

Javascript 当WeekView包装两个不同的月份时,在FullCalendar中仅显示一个月份名称

Javascript 当WeekView包装两个不同的月份时,在FullCalendar中仅显示一个月份名称,javascript,fullcalendar,momentjs,Javascript,Fullcalendar,Momentjs,我正在使用fullcalendar.js进行开发,在周视图中,当一周来自两个不同的月份时,例如7月27日至8月2日,fullcalendar周视图显示两个月文本。我到处都在找,但没有解决办法。也许stackoverflow用户可以帮助我 这就是我所拥有的: 这就是我需要的: 我看到了日期格式,但它是MMMM-YYYY,它会自动返回两个月或一个月,似乎无法更改此格式 在Calendar.defaults的aprox中。非最小化代码对象中的第8300行我可以注意到: titleRangeSepara

我正在使用fullcalendar.js进行开发,在周视图中,当一周来自两个不同的月份时,例如7月27日至8月2日,fullcalendar周视图显示两个月文本。我到处都在找,但没有解决办法。也许stackoverflow用户可以帮助我

这就是我所拥有的: 这就是我需要的: 我看到了日期格式,但它是MMMM-YYYY,它会自动返回两个月或一个月,似乎无法更改此格式

在Calendar.defaults的aprox中。非最小化代码对象中的第8300行我可以注意到:

titleRangeSeparator: ' \u2014 ', // emphasized dash
monthYearFormat: 'MMMM YYYY', // required for en. other languages rely on datepicker computable option
正如我所解释的,monthYearFormat似乎只有一个月,但在一个特定的时刻,它与TitlerangeSpector合并成为两个月

你知道这是怎么解决的吗

多谢各位

编辑 我找到了构成这个复杂字符串的函数,但用于我不想更改的月视图和日视图,我只需要更改为周视图。代码是下一个。如何修改此代码以解决此问题

// Date Range Formatting
// -------------------------------------------------------------------------------------------------
// TODO: make it work with timezone offset

// Using a formatting string meant for a single date, generate a range string, like
// "Sep 2 - 9 2013", that intelligently inserts a separator where the dates differ.
// If the dates are the same as far as the format string is concerned, just return a single
// rendering of one date, without any separator.
function formatRange(date1, date2, formatStr, separator, isRTL) {
   var localeData;

date1 = fc.moment.parseZone(date1);
date2 = fc.moment.parseZone(date2);

localeData = (date1.localeData || date1.lang).call(date1); // works with moment-pre-2.8

// Expand localized format strings, like "LL" -> "MMMM D YYYY"
formatStr = localeData.longDateFormat(formatStr) || formatStr;
// BTW, this is not important for `formatDate` because it is impossible to put custom tokens
// or non-zero areas in Moment's localized format strings.

separator = separator || ' - ';

return formatRangeWithChunks(
    date1,
    date2,
    getFormatStringChunks(formatStr),
    separator,
    isRTL
);
}
fc.formatRange = formatRange; // expose
function formatRangeWithChunks(date1, date2, chunks, separator, isRTL) {
var chunkStr; // the rendering of the chunk
var leftI;
var leftStr = '';
var rightI;
var rightStr = '';
var middleI;
var middleStr1 = '';
var middleStr2 = '';
var middleStr = '';

// Start at the leftmost side of the formatting string and continue until you hit a token
// that is not the same between dates.
for (leftI=0; leftI<chunks.length; leftI++) {
    chunkStr = formatSimilarChunk(date1, date2, chunks[leftI]);
    if (chunkStr === false) {
        break;
    }
    leftStr += chunkStr;
}

// Similarly, start at the rightmost side of the formatting string and move left
for (rightI=chunks.length-1; rightI>leftI; rightI--) {
    chunkStr = formatSimilarChunk(date1, date2, chunks[rightI]);
    if (chunkStr === false) {
        break;
    }
    rightStr = chunkStr + rightStr;
}

// The area in the middle is different for both of the dates.
// Collect them distinctly so we can jam them together later.
for (middleI=leftI; middleI<=rightI; middleI++) {
    middleStr1 += formatDateWithChunk(date1, chunks[middleI]);
    middleStr2 += formatDateWithChunk(date2, chunks[middleI]);
}

if (middleStr1 || middleStr2) {
    if (isRTL) {
        middleStr = middleStr2 + separator + middleStr1;
    }
    else {
        middleStr = middleStr1 + separator + middleStr2;
    }
}

return leftStr + middleStr + rightStr;
}

不幸的是,这并没有得到直接支持,但仍然有一种比修改FC源代码更好的方法,因为它会因为补丁和其他东西而变得一团糟

有几个渲染挂钩可用,我们可以使用它们在事后修复格式。不起作用,因为它是在标题更改之前调用的。所以我们可以用它来代替

这不是世界上最优雅的事情,但它应该比修改源代码更有效。如果有任何问题,请告诉我

编辑:


此外,如果在正确的日期格式之前闪烁错误的日期格式时遇到问题,请使用css使标题不可见。然后在eventAfterAllRender中向元素添加一个类,使其再次可见。

嘿,这似乎是一个很好的答案。我明天早上检查,我值得你的赏金。非常感谢。一个问题:我需要把这个函数放在哪里?@Marcos这是一个完整的日历选项。看一看小提琴这似乎管用,但不管用。这是因为替换字符串。我的日历是2015年1月1日至2月2日,而不是2015年1月1日至2月2日。我正在使用其他regexp进行测试。我将replace函数改为:var text=$title.text.replace/-.*[]/,'';现在它开始工作了。非常感谢你!
eventAfterAllRender:function(){
    if(view.name!=="agendaWeek")
        return;
    var $title = $("#calendar").find(".fc-toolbar h2"); //Make sure this is the right selector
    var text = $title.text();
    text = text.match(/.*? /)+text.match(/[0-9]+/);
    $title.text(text); //replace text
}