javascript-获取字符串的第二天

javascript-获取字符串的第二天,javascript,date,Javascript,Date,我有一个varexample=“05-10-1983” 如何获取字符串示例的“第二天” 我尝试过使用Date对象…但什么都没有…您可以使用名为php.js的框架。谷歌就是这样。这包括高级日期功能和更多功能,适用于以下简单场景: var example = '05-10-1983'; var date = new Date(); var parts = example.split('-'); date.setFullYear(parts[2], parts[0]-1, parts[1]); //

我有一个varexample=“05-10-1983”

如何获取字符串示例的“第二天”


我尝试过使用Date对象…但什么都没有…

您可以使用名为php.js的框架。谷歌就是这样。这包括高级日期功能和更多功能,适用于以下简单场景:

var example = '05-10-1983';
var date = new Date();
var parts = example.split('-');
date.setFullYear(parts[2], parts[0]-1, parts[1]); // year, month (0-based), day
date.setTime(date.getTime() + 86400000);
alert(date);
本质上,我们创建一个空函数,并使用该函数设置年、月和日期。然后,我们使用获取该日期的时间戳,并向其添加1天(86400000毫秒),然后使用函数将其设置回日期


如果您需要比这更复杂的东西,比如支持不同的格式之类的东西,那么您应该看看为您做了大量工作的方法。

使用+86400000方法的问题是在跨越夏令时障碍时可能会出错。
new Date(+new Date('05-10-1983'.replace(/-/g,'/')) + 24*60*60*1000)
例如,我在美国东部时间。 如果我这样做:

var d = new Date("11/04/2012 00:00:00");
var e = new Date(d.getTime() + 86400000);
e将是2012年11月4日23:00:00 如果只提取日期部分,则会得到错误的值。我最近在编写日历控件时遇到了这个问题

这会做得更好(并且有一个灵活的补偿,可以让你在未来多做一天):

所以

因为夏令时的障碍而无法工作。我遇到了同样的问题。我最后做了这样的事情:

function next_day(date) {
  var e = new Date(date.getTime() + 24 * 60 * 60 * 1000);
  if e.getHours() != date.getHours() {
    e = new Date(e.getTime() + (e.getHours() - date.getHours()) * 60 * 60 * 1000)
  }
  return e;
}

您可以执行以下操作:

var nextDay;
var example = "05-10-1983";

nextDay = new Date(example);
nextDay.setDate(nextDay.getDate() + 1);
#getDate
/
#setDate
获取/设置当月的当前日期(1-31)


运行上述命令后,
nextDay
将设置为明天的任何日期。如果是月末,这也将过渡到下一个月/年,甚至可以处理闰年。:)

您可以通过
getDay()
函数找到日期索引,并按照以下方式创建一个日期字符串数组-

day = new Date(YourDate);

var dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

day = dayArray[day.getDay()+1];

有闰秒、闰日、DST等,所以这在所有情况下都是一个棘手的问题

在我看来,解决这个问题的最好方法(没有日期库)是利用日期构造函数溢出特性[1]:

main();
函数main(){
变量日期=uniqueDateParse('05-10-1983');
var newDate=nextDay(日期);
打印(日期);
打印(新日期);
}
函数uniqueDateParse(字符串){
var stringArray=string.split('-',3);
var month=stringArray[0],
day=stringArray[1],
年份=字符串数组[2];
//按照ISO 8601[2],使用太平洋夏令时[3]。
var dateString=year+'-'+month+'-'+day+'T00:00-07:00';
返回新日期(日期字符串);
} 
功能下一天(日期){
返回新日期(Date.getFullYear()
,date.getMonth()
,date.getDate()+1);
}
函数打印(对象){
console.log(对象);
}
链接 [1]

[2]


[3]

字符串是否总是采用MM-DD-YYY格式?这对于navtive js来说非常简单,我不会直接使用另一个“框架”。使用
date.setDate(date.getDate()+1)是否存在闰年/秒问题?您的代码是否具有DD-MM-YYYY或MM-DD-YYYY格式的示例日期?我认为它是MM-DD-YYYY格式,但我也希望与您确认。如果d+偏移量跨越月份边界,您的解决方案将回滚到月初,但Date()+偏移量没有。您需要锚定新的基准日期,将天数添加到原始日期。所以不是:
newdate(newdate().setDate(d.getDate()+offset))应该是:
newdate(newdate(d.getTime()).setDate(d.getDate()+offset))否则,您将根据当前日期()的月份+偏移量,而不是函数参数+偏移量中给定的d日期来执行算术。我还没有对其进行测试,但对于我没有想到的DST问题,这是一个有趣的解决方案。我想不出任何其他情况下这是行不通的。
var nextDay;
var example = "05-10-1983";

nextDay = new Date(example);
nextDay.setDate(nextDay.getDate() + 1);
day = new Date(YourDate);

var dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

day = dayArray[day.getDay()+1];