Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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 一月号发行_Javascript_Date_Monthcalendar - Fatal编程技术网

Javascript 一月号发行

Javascript 一月号发行,javascript,date,monthcalendar,Javascript,Date,Monthcalendar,当我执行此函数时,我得到0作为警报,但如果设置为“2”)。我有两个戒备。同样,如果3,4,5,6,7,8。。。然后它会在过去的同一个月发出警报,那么一月有什么问题 但我也观察到,如果 function datecheck(){ var dt1 = new Date(); dt1.setUTCFullYear("2017"); dt1.setUTCDate("1"); dt1.setUTCMonth("1"); alert(dt1.getUTCMonth()

当我执行此函数时,我得到0作为警报,但如果设置为“2”)。我有两个戒备。同样,如果3,4,5,6,7,8。。。然后它会在过去的同一个月发出警报,那么一月有什么问题

但我也观察到,如果

function datecheck(){
    var dt1 = new Date();
    dt1.setUTCFullYear("2017");
    dt1.setUTCDate("1");
    dt1.setUTCMonth("1");
    alert(dt1.getUTCMonth());
}
行为更改当1被传递时,它将开始向0发出警报。我完全搞不懂发生了什么

谁能告诉我哪里出了问题


提前谢谢。

您有几个问题。首先,除非你真的知道自己在做什么,否则以这种方式改变
Date
对象是不可取的。最好将所需参数传递给构造函数:

function datecheck(){
    var dt1 = new Date();
    dt1.setUTCFullYear("2017");
    dt1.setUTCMonth("1");
    dt1.setUTCDate("1");
    alert(dt1.getUTCMonth());
}

请注意,我的分数为零。这是因为与其他日期相关的计数不同,JavaScript月份从0到11

其次,你忽视了时区的影响。JavaScript在本地时区中构造日期对象。例如,我现在是GMT-5。 如果在浏览器控制台中执行以下操作:

var jan1 = new Date(2017, 0, 1);

五个小时的偏移将UTC时间推到下个月。

JavaScript月份从0到11。不,这没有道理。不,不能更改它,因为它会破坏向后兼容性。是的,它让我们都疯狂。月(日和年)也是数字,而不是字符串。当你应该只写
1
的时候,为什么还要花额外的精力去写
“1”
?@JaredSmith我个人喜欢它-
['Jan'、'Feb'、'Mar'…][date.getUTCMonth()]
是一个巧妙的技巧:D@NiettheDarkAbsol是的,很确定我们都写过
const MONTHS=[]
在某个时候:)我不确定这是如何回答这个问题的,因为OP使用的是所有的
[gs]etUTC*
函数…@NiettheDarkAbsol根据调用方法的顺序,根据结果做出了一些假设。有点像当你看到一个标题和正文相当复杂的问题,但你几乎立刻就知道这是一个“如何从异步请求返回结果”的骗局,这是本能的。够公平的了!:D
var dec31 = new Date(2016, 11, 31, 20); // 20hr == 8pm
dec31.getMonth();    // 11
dec31.getUTCMonth(); // 0