【发布时间】:2009-07-21 18:19:28
【问题描述】:
我有一个 var example = "05-10-1983"
我怎样才能得到字符串example的“第二天”?
我尝试使用 Date 对象...但什么都没有...
【问题讨论】:
-
字符串是否总是采用 MM-DD-YYY 格式?
标签: javascript date
我有一个 var example = "05-10-1983"
我怎样才能得到字符串example的“第二天”?
我尝试使用 Date 对象...但什么都没有...
【问题讨论】:
标签: javascript date
这适用于您所拥有的简单场景:
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);
本质上,我们创建一个空的Date object,并使用setFullYear() 函数设置年、月、日。然后,我们使用 getTime() 获取该日期的时间戳,并为其添加 1 天(86400000 毫秒),并使用 setTime() 函数将其设置回日期。
如果你需要比这更复杂的东西,比如支持不同的格式和类似的东西,你应该看看datejs library,它为你做了很多工作。
【讨论】:
date.setDate(date.getDate() + 1);是否存在闰年/秒问题?
您可以执行以下操作:
var nextDay;
var example = "05-10-1983";
nextDay = new Date(example);
nextDay.setDate(nextDay.getDate() + 1);
#getDate/#setDate 获取/设置当前日期 (1-31)。
以上运行后,nextDay 将设置为明天的日期。如果是月底,这也将滚动到下个月/下一年,甚至可以处理闰年。 :)
【讨论】:
new Date(+new Date('05-10-1983'.replace(/-/g,'/')) + 24*60*60*1000)
【讨论】:
+86400000 方法的问题是跨越夏令时障碍时可能会出错。 例如,我在 EST。 如果我这样做:
var d = new Date("11/04/2012 00:00:00");
var e = new Date(d.getTime() + 86400000);
e 将是 2012 年 11 月 4 日 23:00:00 如果然后仅提取日期部分,则会得到错误的值。我最近在编写日历控件时遇到了这个问题。
这会做得更好(并且有一个灵活的偏移量,可以让你在未来超过 1 天):
function getTomorrow(d,offset) {
if (!offset) { offset = 1 }
return new Date(new Date().setDate(d.getDate() + offset));
}
【讨论】:
new Date(new Date().setDate(d.getDate() + offset)); 应该是:new Date(new Date(d.getTime()).setDate(d.getDate() + offset)); 否则,您将根据当前 Date() + 偏移量的月份进行算术,而不是函数参数 + 偏移量中给出的 d 日期。
所以
var d = new Date("11/04/2012 00:00:00");
var e = new Date(d.getTime() + 86400000);
由于夏令时障碍而无法工作。我遇到了同样的问题。我最终做了这样的事情:
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;
}
【讨论】:
您可以使用名为 php.js 的框架。谷歌为它。这包括高级日期功能等
【讨论】:
您可以通过getDay() 函数找出日期索引,并按以下方式创建一个日期字符串数组-
day = new Date(YourDate);
var dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
day = dayArray[day.getDay()+1];
【讨论】:
有闰秒、闰日、夏令时等,所以这在所有情况下都是一个棘手的问题。
在我看来,解决这个问题的最好方法(没有日期库)是利用 Date 构造函数溢出特性[1]:
main();
function main() {
var date = uniqueDateParse( '05-10-1983' );
var newDate = nextDay( date );
print( date );
print( newDate );
}
function uniqueDateParse( string ) {
var stringArray = string.split( '-', 3 );
var month = stringArray[ 0 ],
day = stringArray[ 1 ],
year = stringArray[ 2 ];
// Per ISO 8601[2], using Pacific Daylight Time[3].
var dateString = year + '-' + month + '-' + day + 'T00:00:00-07:00';
return new Date( dateString );
}
function nextDay( date ) {
return new Date( date.getFullYear()
, date.getMonth()
, date.getDate() + 1 );
}
function print( object ) {
console.log( object );
}
[1]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters
【讨论】: