Date.UTC()返回上个月的最后一天,而getUTCFullYear(),getUTCMonth()正确返回正确月份的第一天

时间:2015-05-05 21:22:25

标签: javascript date utc

我得到了一个奇怪的结果:

   var date = new Date();
   var year  = date.getMonth() < 11 ? date.getFullYear() : date.getFullYear() + 1;
   var month = date.getMonth() < 11 ? date.getMonth() + 1 : 0;

   console.log(new Date(Date.UTC(year, month)));

   var utcYear = date.getUTCMonth() < 11 ? date.getUTCFullYear() : date.getUTCFullYear() + 1;
   var utcMonth = date.getUTCMonth() < 11 ? date.getUTCMonth() + 1 : 0;

   console.log(new Date(utcYear, utcMonth));

根据我使用的特定日期(任何日期都可以),Date.UTC给了我:

2015年5月31日星期日19:00:00 GMT-0500(中部夏令时)

getUTC ... aproach给了我:

2015年6月1日星期一00:00:00 GMT-0500(中部夏令时)

我是否误用了Date.UTC或者我错过了什么?

由于

2 个答案:

答案 0 :(得分:0)

您正在使用UTC时间创建日期,但之后您将在当地时间显示日期,这就是为什么它会落后几个小时。使用Date.prototype.toUTCString()查看UTC时间

&#13;
&#13;
  var date = new Date();
  var year = date.getMonth() < 11 ? date.getFullYear() : date.getFullYear() + 1;
  var month = date.getMonth() < 11 ? date.getMonth() + 1 : 0;

  // It's a UTC date, display it as UTC, not local time
  console.log(new Date(Date.UTC(year, month)).toUTCString());

  var utcYear = date.getUTCMonth() < 11 ? date.getUTCFullYear() : date.getUTCFullYear() + 1;
  var utcMonth = date.getUTCMonth() < 11 ? date.getUTCMonth() + 1 : 0;

  // Created using local time, you can just use the normal toString()
  console.log(new Date(utcYear, utcMonth));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

  

此代码是为了获取下个月的第一天(每月重复一次,直到下个月才开始)。

然后你正在寻找

var today = new Date(); // now

var utcYear = today.getUTCMonth() < 11 ? today.getUTCFullYear() : today.getUTCFullYear() + 1;
var utcMonth = today.getUTCMonth() < 11 ? today.getUTCMonth() + 1 : 0;

var date = new Date(Date.UTC(utcYear, utcMonth)); // next UTC month
console.log(date.toString()); // Mon Jun 01 2015 02:00:00 GMT+0200 
// or, in your timezone:         Sun May 31 2015 19:00:00 GMT-0500 (same moment)
console.log(date.toUTCString()); // Mon, 01 Jun 2015 00:00:00 GMT

顺便说一下,Date方法确实会将过大的值输入到accout中(并自动结转它们),所以你只需要这样做

var today = new Date(); // now
var date = new Date(Date.UTC(today.getUTCFullYear(), today.getUTCMonth()+1)); // next UTC month