我得到了一个奇怪的结果:
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或者我错过了什么?
由于
答案 0 :(得分:0)
您正在使用UTC时间创建日期,但之后您将在当地时间显示日期,这就是为什么它会落后几个小时。使用Date.prototype.toUTCString()查看UTC时间
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;
答案 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