考虑月份的话,2L的稍改下就可以了 var date1 = "2010年9月16日 14:38:20"; var date2 = "2010/8/30 18:25:18"; date1 = date1.replace("年","/").replace("月","/").replace("日",""); var d1 = parseInt(new Date(date1).getTime()/1000/60/60/24); var d2 = parseInt(new Date(date2).getTime()/1000/60/60/24); var days = d1 - d2; alert(days);========================== to #5楼: var date1 = new Date(DI1[0], DI1[1], DI1[2], DI1[3], DI1[4], DI1[5]); 用这种方法定义日期,月份一定要-1(月份范围0-11)
var date2 = "2010/9/10 18:25:18";
date1 = date1.replace("年","/").replace("月","/").replace("日","");
var days = new Date(date1).getDate()-new Date(date2).getDate();
alert(days);//6
<head>
<script language="javascript">
var str1 = '2010年9月16日 14:38:20';
var str2 = '2010/9/10 18:25:18';
//用字符串分割, 精确到日
function Days(day1, day2){
var y1, y2, m1, m2, d1, d2;//year, month, day;
y1 = parseInt(day1);
y2 = parseInt(day2.split('/')[0]); m1 = parseInt(day1.split('年')[1].split('月')[0]);
m2 = parseInt(day2.split('/')[1]); d1 = parseInt(day1.split('年')[1].split('月')[1].split('日')[0]);
d2 = parseInt(day2.split('/')[2]); var date1 = new Date(y1, m1, d1);
var date2 = new Date(y2, m2, d2);
//用距标准时间差来获取相距时间
var minsec = Date.parse(date1) - Date.parse(date2);
var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day return days;
} alert(Days(str1, str2)); //用正则, 且精确到秒
function Days1(day1, day2){
var y1, y2, y3, m1, m2, m3, d1, d2, d3, h1, h2, h3, _m1, _m2, _m3, s1, s2, s3;
var reg = /年|月|日 |\/|:| /;
//dayinfo - 用正则分割
var DI1 = day1.split(reg);
var DI2 = day2.split(reg); var date1 = new Date(DI1[0], DI1[1], DI1[2], DI1[3], DI1[4], DI1[5]);
var date2 = new Date(DI2[0], DI2[1], DI2[2], DI2[3], DI2[4], DI2[5]); //用距标准时间差来获取相距时间
var minsec = Date.parse(date1) - Date.parse(date2);
var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day
return days;
} alert(Days1(str1, str2));
</script>
</head>
<body>
</body>
</html>
当然考虑了 这是根据标准时间相减的出来的毫秒值.
不过lz说的问题我查了一下, 以前还真没注意
http://www.soidc.net/discuss/12/060803/21/62525_1.html
这是JS的bug, 8月31日会自动等于9月1日. 囧, 真不知道还有这种事, 你换做别的日期来时应该都是对的吧. 解决办法, 如果判断出来某一天是8月31日, 就相应+1或-1。
另请仔细看代码, 我的思路没错
var date1 = "2010年9月16日 14:38:20";
var date2 = "2010/8/30 18:25:18";
date1 = date1.replace("年","/").replace("月","/").replace("日","");
var d1 = parseInt(new Date(date1).getTime()/1000/60/60/24);
var d2 = parseInt(new Date(date2).getTime()/1000/60/60/24);
var days = d1 - d2;
alert(days);==========================
to #5楼:
var date1 = new Date(DI1[0], DI1[1], DI1[2], DI1[3], DI1[4], DI1[5]);
用这种方法定义日期,月份一定要-1(月份范围0-11)
6L的时间获取也是对的. 只不过一个是用date.getTime()一个是用Date.parse(date)结果是一样的. 遇到8月31还是出问题. 我仔细查了一下, js里认为8月只有30天, lz遇到8月就稍加修改
dateObj = new Date(dateVal)
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) 参数
dateObj必选项。要赋值为 Date 对象的变量名。dateVal必选项。如果是数字值,dateVal 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间 的毫秒数。如果是字符串,则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX(R) 对象返回的 VT_DATE 值。year必选项。完整的年份,比如,1976(而不是 76)。month必选项。表示的月份,是从 0 到 11 之间的整数( 1 月至 12 月)。date必选项。表示日期,是从 1 到 31 之间的整数。hours可选项。 如果提供了 minutes 则必须给出。表示小时,是从 0 到 23 的整数(午夜到 11pm)。minutes可选项。 如果提供了 seconds 则必须给出。表示分钟,是从 0 到 59 的整数。seconds可选项。 如果提供了 milliseconds 则必须给出。表示秒钟,是从 0 到 59 的整数。ms可选项。 表示毫秒,是从 0 到 999 的整数。============================================
月份和日期的双重标准让人很不爽~
alert(date.getMonth())
那么有没有试一下输出new Date(2010,1,1)和new Date(2010,2,1)之间的天数差?
<head>
<script type="text/javascript" src="jquery/jquery.js"></script>
<script language="javascript">
//var date = new Date(2010,1,20);
//alert(date.getMonth())
var str1 = '2010年9月16日 14:38:20';
var str2 = '2010/8/30 18:25:18';
//用字符串分割, 精确到日
function Days(day1, day2){
var y1, y2, m1, m2, d1, d2;//year, month, day;
y1 = parseInt(day1);
y2 = parseInt(day2.split('/')[0]); m1 = parseInt(day1.split('年')[1].split('月')[0]);
m2 = parseInt(day2.split('/')[1]); d1 = parseInt(day1.split('年')[1].split('月')[1].split('日')[0]);
d2 = parseInt(day2.split('/')[2]); var date1 = new Date(y1, m1-1, d1);
var date2 = new Date(y2, m2-1, d2); //用距标准时间差来获取相距时间
var minsec = date1.getTime() - date2.getTime();
var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day return days;
} alert(Days(str1, str2)); //用正则, 且精确到秒
function Days1(day1, day2){
var y1, y2, y3, m1, m2, m3, d1, d2, d3, h1, h2, h3, _m1, _m2, _m3, s1, s2, s3;
var reg = /年|月|日 |\/|:| /;
//dayinfo - 用正则分割
var DI1 = day1.split(reg);
var DI2 = day2.split(reg); var date1 = new Date(DI1[0], parseInt(DI1[1])-1, DI1[2], DI1[3], DI1[4], DI1[5]);
var date2 = new Date(DI2[0], parseInt(DI2[1])-1, DI2[2], DI2[3], DI2[4], DI2[5]); //用距标准时间差来获取相距时间
var minsec = Date.parse(date1) - Date.parse(date2);
var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day
return days;
} alert(Days1(str1, str2));
</script>
</head>
<body>
</body>
</html>