在Javascript中以UTC格式设置日期

时间:2017-11-01 08:09:15

标签: javascript date

我有这种问题。 我想在给定日期元素的情况下以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的初学者。 谢谢

1 个答案:

答案 0 :(得分:1)

问题在于您设置字段的顺序。对于每个字段,Date对象会尝试使您的号码有效。由于大多数月份没有31天,因此Date此时的任何月份决定了它对该值的影响。例如,当我写这个是11月时,new Date给了我们11月的约会。调用setDate(31)会将日期设置为12月1日,因为即使11月只有30天,Date对象也会尝试生效31。如果它目前是2月的非闰年,setDate(31)会将日期设置为3月3日。

相反,请将new Datehttps://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());