Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串转换为日期并减去X天_Javascript_Date - Fatal编程技术网

Javascript 将字符串转换为日期并减去X天

Javascript 将字符串转换为日期并减去X天,javascript,date,Javascript,Date,我需要创建一个函数,该函数以字符串和x个天数(子天数)作为参数,并将字符串转换为日期,然后从日期中减去x个天数 输入字符串的格式为(YYYY-MM-DD),我希望返回相同的格式 我收到一个无效日期错误 function newDate(date, subDays) { var myDate = new Date(date); myDate.setDate(myDate -subDays); console.log("Date: " + myDate); } 首先,你必须

我需要创建一个函数,该函数以字符串和x个天数(子天数)作为参数,并将字符串转换为日期,然后从日期中减去x个天数

输入字符串的格式为(YYYY-MM-DD),我希望返回相同的格式

我收到一个
无效日期
错误

function newDate(date, subDays) {
    var myDate = new Date(date);
    myDate.setDate(myDate -subDays);
    console.log("Date: " + myDate);
}

首先,你必须详细说明你试图扣除的金额;试试这个:-

function newDate(date, subDays) {
var myDate = new Date(date);

myDate.setDate(myDate.getDate() -subDays);
console.log("Date: " + myDate);
}

首先,你必须详细说明你试图扣除的金额;试试这个:-

function newDate(date, subDays) {
var myDate = new Date(date);

myDate.setDate(myDate.getDate() -subDays);
console.log("Date: " + myDate);
}

建议不要使用日期构造函数的解析器,因为它可能依赖于实现,而不是一些广泛接受的格式。所以我们自己解析字符串

通过使用
getTime
获取毫秒数并加/减毫秒数,对日期进行调整

函数newDate(日期,子天){
函数padZero(v){
返回(v<10)-“0”+v:v;
}
var dateArray=date.split('-').map(编号);
var myDate=新日期(dateArray[0],dateArray[1]-1,dateArray[2]);
myDate=新日期(myDate.getTime()-子天*24*60*60*1000)
返回myDate.getFullYear()+'-'+padZero(myDate.getMonth()+1)+'-'+padZero(myDate.getDate());
}
控制台日志(新日期('2016-12-09',8))

console.log(newDate('2016-12-09',9))
建议不要使用日期构造函数的解析器,因为它可能依赖于实现,而不是一些广泛接受的格式。所以我们自己解析字符串

通过使用
getTime
获取毫秒数并加/减毫秒数,对日期进行调整

函数newDate(日期,子天){
函数padZero(v){
返回(v<10)-“0”+v:v;
}
var dateArray=date.split('-').map(编号);
var myDate=新日期(dateArray[0],dateArray[1]-1,dateArray[2]);
myDate=新日期(myDate.getTime()-子天*24*60*60*1000)
返回myDate.getFullYear()+'-'+padZero(myDate.getMonth()+1)+'-'+padZero(myDate.getDate());
}
控制台日志(新日期('2016-12-09',8))

console.log(newDate('2016-12-09',9))
这里是一种方法

console.log(toYMD(subDays('2016-12-11',3));
功能子天(日期,天){
var dateArray=date.split('-');
var myDate=新日期(dateArray[0],dateArray[1]-1,dateArray[2]);
返回新日期(myDate.setDate(myDate.getDate()-days));
}
函数toYMD(d){
返回d.getFullYear()+“-”+
padZero(d.getMonth()+1)+“-”+
padZero(d.getDate());
}
函数padZero(v){
返回(v<10)-“0”+v:v;

}
这里有一种方法可以做到这一点

console.log(toYMD(subDays('2016-12-11',3));
功能子天(日期,天){
var dateArray=date.split('-');
var myDate=新日期(dateArray[0],dateArray[1]-1,dateArray[2]);
返回新日期(myDate.setDate(myDate.getDate()-days));
}
函数toYMD(d){
返回d.getFullYear()+“-”+
padZero(d.getMonth()+1)+“-”+
padZero(d.getDate());
}
函数padZero(v){
返回(v<10)-“0”+v:v;
}
有一个名为的包,您可以轻松地在日期对象上使用addDays()、addHours()、addMinutes()。以下是API文档:

有一个名为的包,您可以轻松地在日期对象上使用addDays()、addHours()、addMinutes()。以下是API文档:


我错过了零填充:)谢谢你的贡献。这很好地解决了问题,我错过了零填充:)谢谢你的贡献。这很好地解决了问题,这正是问题所在。非常感谢。使用零填充函数也可以正确设置格式。通过@LGSON检查答案不需要
map(Number)
。天数应该增加,而不是时间,因为在实行夏时制的地方,并非所有的天数都是24小时。正确解析字符串的要点。@RobG感谢您花时间纠正我。了解DST中的日长差异很有趣。我将对此进行深入研究。关于
map(Number)
这是我第二次得到这个建议,我在代码中写下这个建议,以确保
split
中的字符串数组按照日期构造函数的预期转换为
Number
数组,这是一种过度杀伤力吗?@sabithpocker当传递多个参数时,它将调用每个参数的ToNumber,作为处理这些参数的第一步。是的,这太过分了这正合适。非常感谢。使用零填充函数也可以正确设置格式。通过@LGSON检查答案不需要
map(Number)
。天数应该增加,而不是时间,因为在实行夏时制的地方,并非所有的天数都是24小时。正确解析字符串的要点。@RobG感谢您花时间纠正我。了解DST中的日长差异很有趣。我将对此进行深入研究。关于
map(Number)
这是我第二次得到这个建议,我在代码中写下这个建议,以确保
split
中的字符串数组按照日期构造函数的预期转换为
Number
数组,这是一种过度杀伤力吗?@sabithpocker当传递多个参数时,它将调用每个参数的ToNumber,作为处理这些参数的第一步。是的,这太过分了谢谢,这解决了我丢失的错误。Getdate()不要用日期构造函数解析字符串。YYYY-MM-DD格式的日期将被视为UTC,因此对于格林威治以西的用户,日期将出现在前一天。谢谢,这解决了我的错误,缺少了。Getdate()不要用日期构造函数解析字符串。YYYY-MM-DD格式的日期将被视为UTC,因此对于格林威治以西的用户,日期将显示为前一天。