Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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 在月份下拉列表中选择选项12时,为什么12月份不加载?_Javascript_Date_Fullcalendar_Momentjs_Fullcalendar 3 - Fatal编程技术网

Javascript 在月份下拉列表中选择选项12时,为什么12月份不加载?

Javascript 在月份下拉列表中选择选项12时,为什么12月份不加载?,javascript,date,fullcalendar,momentjs,fullcalendar-3,Javascript,Date,Fullcalendar,Momentjs,Fullcalendar 3,我正在写完整的日历。 在从互联网上获得参考资料后,我手动添加了月份下拉列表。 到目前为止,它工作正常。 问题是,到9月份为止,它运行良好。 但当我选择十月时,它只显示九月,然后对于十一月-它显示十月,对于十二月,它只显示十一月。十二月在此下拉列表和日历中不起作用 我的代码如下: $(".fc-right").append('<select class="select_month"><option value="">Select Month</option>&l

我正在写完整的日历。 在从互联网上获得参考资料后,我手动添加了月份下拉列表。 到目前为止,它工作正常。 问题是,到9月份为止,它运行良好。 但当我选择十月时,它只显示九月,然后对于十一月-它显示十月,对于十二月,它只显示十一月。十二月在此下拉列表和日历中不起作用

我的代码如下:

$(".fc-right").append('<select class="select_month"><option value="">Select Month</option><option value="1">Jan</option><option value="2">Feb</option><option value="3">Mrch</option><option value="4">Aprl</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">Aug</option><option value="9">Sep</option><option value="10">Oct</option><option value="11">Nov</option><option value="12">Dec</option></select>');

$(".select_month").on("change", function (event) {
    $('#calendar_full').fullCalendar('changeView', 'month', this.value);
    $('#calendar_full').fullCalendar('gotoDate', y + '-' + this.value + '-1');
}); // y assigned as selected year.
$(“.fc right”).append('Select MonthJanFebMrchAprlMayJuneJulyAugSepOctNovDec');
$(“.select_month”)。关于(“更改”,函数(事件){
$('#calendar_full').fullCalendar('changeView','month',this.value);
$(“#calendar_full”).fullCalendar('gotoDate',y+'-'+this.value+'-1');
}); // y指定为所选年份。
如果我将10月至11日、11月至12日和12月至13日的选项值更改为正常值,则10月和11月仍不工作


如何修复它。请提供帮助。

您没有创建有效的日期字符串以传递给fullCalendar函数

1)
此值将是一个数字
changeView
希望您提供完整的日期(请参阅)

2)
y+'-'+this.value+'-1'
将生成类似于
2019-1-1
2019-10-1
的日期,这些日期是无效的RFC2822或ISO日期格式,这是由于月份和日期部分中的单个数字值造成的

当您尝试使用这些值作为日期时,您将在控制台(由momentJS生成)中看到一条警告,因为它无法保证这些值是否被正确解释。很明显,在你的情况下,有一些不正确的解释,导致你的问题。提供了支持的日期格式的清晰列表。另见相关文件

此外,在这里使用
changeView
是多余的。如果要确保选择“月”视图,请使用
changeView
,并传递日期。如果只想更改日期而不关心视图类型,请使用
goToDate
。对于这个例子,我假设您想要
changeView

解决方法很简单:

1) 确保所有下拉选项都有两位数的值

2) 将硬编码的日期字符串也设置为两位数
01

3) 将完整日期字符串传递给fullCalendar函数

$(".fc-right").append('<select class="select_month"><option value="">Select Month</option><option value="01">Jan</option><option value="02">Feb</option><option value="03">Mrch</option><option value="04">Aprl</option><option value="05">May</option><option value="06">June</option><option value="07">July</option><option value="08">Aug</option><option value="09">Sep</option><option value="10">Oct</option><option value="11">Nov</option><option value="12">Dec</option></select>');

$(".select_month").on("change", function(event) {
  var dateStr = y + '-' + this.value + '-01';
  console.log(dateStr);
  $('#calendar_full').fullCalendar('changeView', 'month', dateStr);
});
$(“.fc right”).append('Select MonthJanFebMrchAprlMayJuneJulyAugSepOctNovDec');
$(“.select_month”)。关于(“更改”,函数(事件){
var dateStr=y+'-'+this.value+'-01';
console.log(dateStr);
$('calendar'u full')。fullCalendar('changeView','month',dateStr);
});

工作演示:

您使用自己的下拉列表选择月份,而不是使用FullCalendar提供的控件,这有什么原因吗?如果没有工作示例,我会假设您可能没有为
changeView
gotoDate
方法向插件传递正确/兼容的日期/值。如果我没有弄错的话。您正在传递单个数字(作为字符串)。请尝试传入类似于
'2019-'+('00'+this.value).slice(-2)+'-01'
的内容。@Barmar可能吧?在这种情况下,OP可以尝试为
gotoDate
调用传递相同的值。我认为关键是要使用格式正确的日期。可能不需要同时使用
changeView
gotoDate
。为什么它可以与
2019-3-1
一起使用,但与
2019-10-1
一起关闭1?它们都有一个位数的日部分。“这只是一个意外,它第一次起作用吗?”巴尔马我想是的。如果JS日期构造函数无法识别格式,那么它会尽全力处理您提供的任何内容。结果不能保证。不同的浏览器引擎之间的行为甚至可能有所不同。它这样做,而不是仅仅抛出一个错误,这有点愚蠢。我认为它使用的是moment.js解析器,而不是原生的js解析器。fullCalendar使用的是momentJS,但是如果使用错误的日期字符串,您在浏览器中看到的momentJS的完整警告如下:“弃用警告:提供的值不是可识别的RFC2822或ISO格式。moment构造回到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822/ISO日期格式,并将在即将发布的主要版本中删除。请参阅以了解更多信息。“因此,基本上,momentJS无法读取它并警告您。JS Date也不能始终读取它,但不会警告您。这是有道理的。关于本机日期分析器的奇怪结果,还有许多其他问题。