我打赌这是非常愚蠢的事情,但我很累,正在寻找一个快速的逃生,所以请放纵我。目标是能够将任意日期添加到由2015-01-01
之类的字符串构造的日期。
firstDate = '2015-01-01';
var t1_date = new Date(firstDate);
t1_date.setTime( t1_date.getTime() + 90 * 86400000 );
lastDate = getFormattedDate(t1_date);
console.log("Two dates: ", firstDate, lastDate);
function getFormattedDate(date) {
var year = date.getFullYear();
var month = date.getMonth().toString();
month = month.length > 1 ? month : '0' + month;
var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day;
return year + '-' + month + '-' + day;
}
然后:
我得到错误的输出,因为我要添加90天..
Two dates: 2015-01-01 2015-02-31
答案 0 :(得分:3)
问题出在这一行:
var month = date.getMonth().toString();
函数Date.getMonth()根据当地时间返回“指定日期的月份(0-11)”。 1月为0
,12月为11
,因此您需要在输出中添加1:
var month = "" + (date.getMonth()+1);
答案 1 :(得分:0)
var month = date.getMonth().toString();
打印从0开始的月份数,因此例如月份数减少1。来自date.getMonth()的一月的价值;将是0,依此类推至11月。
这里是您代码的正确版本
firstDate = '2015-01-01';
var t1_date = new Date(firstDate);
console.log("before conversion");
console.log(t1_date);//before conversion
t1_date.setTime( t1_date.getTime() + 90 * 86400000 );
console.log("after conversion");
console.log(t1_date);//after conversion
lastDate = getFormattedDate(t1_date);
console.log("Two dates: ", firstDate, lastDate);
function getFormattedDate(date)
{
var year = date.getFullYear();
var month = date.getMonth();
var month1=(month+1).toString();
month1 = month1.length > 1 ? month1 : '0' + month1;
var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day;
return year + '-' + month1 + '-' + day;
}
答案 2 :(得分:0)
永远不要使用Date构造函数解析字符串,始终手动解析它们。没有时区的ISO日期应该被视为本地*,但ES5表示将其视为UTC,然后ECMAScript 2015推断将它们视为本地(为了保持一致),但实施者决定对待它们再次作为UTC,因此浏览器可以做任何一种(或NaN)。
所以明智的做法是手动将它们解析为本地。
输出本地ISO日期也相当简单。
*本地意味着每个系统设置。
function parseISODate(s) {
var b = s.split(/\D/);
var d = new Date(b[0], --b[1], b[2]);
return d && d.getMonth() == b[1]? d : new Date(NaN);
}
document.write(parseISODate('2015-01-01') + '<br>');
function toISODate(date) {
function z(n){return ('0'+n).slice(-2)}
return date.getFullYear() + '-' + z(date.getMonth() + 1) + '-' + z(date.getDate());
}
document.write(toISODate(parseISODate('2015-01-01')));
要添加90天,只需将90天添加到日期即可:
var d = new Date(2015,0,1); // 1 January 2015
d.setDate(d.getDate() + 90); // add 90 days
document.write(d.toLocaleString()); // 1 April 2015