我有这种问题。 我想在给定日期元素的情况下以UTC格式设置日期。 日期是2017年10月31日UTC时间 如果我这样做:
var d1 = new Date();
d1.setUTCMilliseconds(0);
d1.setUTCSeconds(0);
d1.setUTCMinutes(0);
d1.setUTCHours(0);
d1.setUTCDate(31);
d1.setUTCMonth(9); //9 is october
d1.setUTCFullYear(2017);
console.log(d1);
控制台中打印的日期是: 2017-10-01T00:00:00.000Z 这是十月的第一个。所有其他日子都按预期工作,但不是本月的最后一天。 这是一个错误还是我不知道的东西?我只是一个Javascript的初学者。 谢谢
答案 0 :(得分:1)
问题在于您设置字段的顺序。对于每个字段,Date
对象会尝试使您的号码有效。由于大多数月份没有31天,因此Date
此时的任何月份决定了它对该值的影响。例如,当我写这个是11月时,new Date
给了我们11月的约会。调用setDate(31)
会将日期设置为12月1日,因为即使11月只有30天,Date
对象也会尝试生效31。如果它目前是2月的非闰年,setDate(31)
会将日期设置为3月3日。
相反,请将new Date
与https://www.regexpal.com/94017:
var d1 = new Date(Date.UTC(2017, 9, 31)); // All the others will default to 0
实例:
// Your way
var d1 = new Date();
d1.setUTCMilliseconds(0);
d1.setUTCSeconds(0);
d1.setUTCMinutes(0);
d1.setUTCHours(0);
d1.setUTCDate(31);
d1.setUTCMonth(9); //9 is october
d1.setUTCFullYear(2017);
console.log("Your way:");
console.log(d1.toISOString());
// Using new Date(Date.UTC(...)) instead:
d1 = new Date(Date.UTC(2017, 9, 31));
console.log("Using new Date(Date.UTC(...)) instead:");
console.log(d1.toISOString());
如果您 出于某种原因对个别电话执行此操作,则您需要将日期设置为1(因为,正如您在评论中所说,如果只是恰好是31,将月份设置为11月将导致12月1日!),然后按顺序将字段设置为最大单位到最小单位:年,月,日,小时,分钟,秒,ms:
d1 = new Date();
d1.setUTCDate(1);
d1.setUTCFullYear(2017);
d1.setUTCMonth(9); //9 is october
// ...and so on in order largest unit to smallest unit
实例:
// Setting them in order: Year, month, day, hour, minute, second, ms
var d1 = new Date();
d1.setUTCDate(1);
d1.setUTCFullYear(2017);
d1.setUTCMonth(9); //9 is october
d1.setUTCDate(31);
d1.setUTCHours(0);
d1.setUTCMinutes(0);
d1.setUTCSeconds(0);
d1.setUTCMilliseconds(0);
console.log("Setting them in order: Year, month, day, hour, minute, second, ms:");
console.log(d1.toISOString());