js计算两个日期相隔几小时几分钟?

xiaoyan21 2009-11-06 08:28:13
日期格式:
dt1 = "2009-11-5 10:30"
dt2 = "2009-11-8 9:20"

求两时间相隔了几小时几分钟.... ?


谢谢各位.

分不够再加
...全文
1333 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wifewifewife 2009-11-06
  • 打赏
  • 举报
回复
学习一下.
JavaAlpha 2009-11-06
  • 打赏
  • 举报
回复
<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function isValidDate(dateStr) {
// Date validation function courtesty of
// Sandeep V. Tamhankar (stamhankar@hotmail.com) -->

// Checks for the following valid date formats:
// MM/DD/YY MM/DD/YYYY MM-DD-YY MM-DD-YYYY

var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year

var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert(dateStr + " Date is not in a valid format.")
return false;
}
month = matchArray[1]; // parse date into variables
day = matchArray[3];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Month "+month+" doesn't have 31 days!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("February " + year + " doesn't have " + day + " days!");
return false;
}
}
return true;
}

function isValidTime(timeStr) {
// Time validation function courtesty of
// Sandeep V. Tamhankar (stamhankar@hotmail.com) -->

// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.

var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

var matchArray = timeStr.match(timePat);
if (matchArray == null) {
alert("Time is not in a valid format.");
return false;
}
hour = matchArray[1];
minute = matchArray[2];
second = matchArray[4];
ampm = matchArray[6];

if (second=="") { second = null; }
if (ampm=="") { ampm = null }

if (hour < 0 || hour > 23) {
alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
return false;
}
if (hour <= 12 && ampm == null) {
if (confirm("Please indicate which time format you are using. OK = Standard Time, CANCEL =

Military Time")) {
alert("You must specify AM or PM.");
return false;
}
}
if (hour > 12 && ampm != null) {
alert("You can't specify AM or PM for military time.");
return false;
}
if (minute < 0 || minute > 59) {
alert ("Minute must be between 0 and 59.");
return false;
}
if (second != null && (second < 0 || second > 59)) {
alert ("Second must be between 0 and 59.");
return false;
}
return true;
}

function dateDiff(dateform) {
date1 = new Date();
date2 = new Date();
diff = new Date();

if (isValidDate(dateform.firstdate.value) && isValidTime(dateform.firsttime.value)) { //

Validates first date
date1temp = new Date(dateform.firstdate.value + " " + dateform.firsttime.value);
date1.setTime(date1temp.getTime());
}
else return false; // otherwise exits

if (isValidDate(dateform.seconddate.value) && isValidTime(dateform.secondtime.value)) { //

Validates second date
date2temp = new Date(dateform.seconddate.value + " " + dateform.secondtime.value);
date2.setTime(date2temp.getTime());
}
else return false; // otherwise exits

// sets difference date to difference of first date and second date

diff.setTime(Math.abs(date1.getTime() - date2.getTime()));

timediff = diff.getTime();

weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

days = Math.floor(timediff / (1000 * 60 * 60 * 24));
timediff -= days * (1000 * 60 * 60 * 24);

hours = Math.floor(timediff / (1000 * 60 * 60));
timediff -= hours * (1000 * 60 * 60);

mins = Math.floor(timediff / (1000 * 60));
timediff -= mins * (1000 * 60);

secs = Math.floor(timediff / 1000);
timediff -= secs * 1000;

dateform.difference.value = weeks + " 星期, " + days + " 天, " + hours + " 小时, " + mins + " 分



, " + secs + " 秒";

return false; // form should never submit, returns false
}
// End -->
</script>
<form onSubmit="return dateDiff(this);">
<table>
<tr><td>
<pre>
起始日期: Date: <input type=text name=firstdate value="" size=10 maxlength=10> (格式为:月月/日

日/年年年年)
Time: <input type=text name=firsttime value="" size=10 maxlength=10> (格式为:时时:分

分:秒秒am/pm)

结束日期: Date: <input type=text name=seconddate value="" size=10 maxlength=10> (格式为:月月/

日日/年年年年)
Time: <input type=text name=secondtime value="" size=10 maxlength=10> (格式为:时时:分

分:秒秒am/pm)

<center><input type=submit value="二者之差">
二者之差为:

<input type=text name=difference value="" size=50>
</center>
</pre>
</td></tr>
</table>
</form>
xiaofan_sap 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yixianggao 的回复:]
L@_@K

JScript codevar dt1="2009-11-5 10:30";var dt2="2009-11-8 9:20";var regTime=/(\d{4})-(\d{1,2})-(\d{1,2})( \d{1,2}:\d{1,2})/g;//alert(dt1.replace(regTime, "$2-$3-$1$4"));var interval= Math.abs(Date.parse(dt1.replace(regTime,"$2-$3-$1$4"))- Date.parse(dt2.replace(regTime,"$2-$3-$1$4")))/1000;var h= Math.floor(interval/3600);var m= Math.floor(interval%3600/60);
alert(h+" 小时"+ m+" 分");
[/Quote]
up
sohighthesky 2009-11-06
  • 打赏
  • 举报
回复

var dt1 = "2009-11-5 10:30"
var dt2 = "2009-11-8 9:20"
function getHoursDiff(dt1,dt2) {
if(typeof(dt1)=="string") {
dt1=new Date(dt1.replace(/-/,'/'));
dt2=new Date(dt2.replace(/-/,'/'));
}
var res=dt2-dt1;
if(isNaN(res))
throw Error("invalid dates arguments");
return res/(1000*60*60);
}
var re=getHoursDiff(dt1,dt2);
var h=parseInt(re);
var m=parseInt((re-h)*60);
alert("时间相隔"+h+"小时"+m+"分钟");
JavaAlpha 2009-11-06
  • 打赏
  • 举报
回复
简单做法

var startDate= new Date("2004/3/1 12:00");
var endDate= new Date("2004/3/1 15:00");
var df=(endDate.getTime()-startDate.getTime());
yudongming 2009-11-06
  • 打赏
  • 举报
回复
学习了
yixianggao 2009-11-06
  • 打赏
  • 举报
回复
L@_@K

var dt1 = "2009-11-5 10:30";
var dt2 = "2009-11-8 9:20";
var regTime = /(\d{4})-(\d{1,2})-(\d{1,2})( \d{1,2}:\d{1,2})/g;
//alert(dt1.replace(regTime, "$2-$3-$1$4"));
var interval = Math.abs(Date.parse(dt1.replace(regTime, "$2-$3-$1$4")) - Date.parse(dt2.replace(regTime, "$2-$3-$1$4")))/1000;
var h = Math.floor(interval / 3600);
var m = Math.floor(interval % 3600 / 60);
alert(h + " 小时 " + m + " 分");
natineprince 2009-11-06
  • 打赏
  • 举报
回复
<html>
<script>
dt1 = "2009-11-5 10:30";
dt2 = "2009-11-8 9:20";

function getD(dt1){
var d1=dt1.split(" ")[0];
var t1=dt1.split(" ")[1];
var y1=d1.split("-")[0];
var m1=parseInt(d1.split("-")[1])-1;
var da1=d1.split("-")[2];
var h1=t1.split(":")[0];
var mi1=t1.split(":")[1];
var dat1=new Date(y1,m1,da1,h1,mi1);
return dat1;
}

var dat1=getD(dt1);
var dat2=getD(dt2);
var c=dat2-dat1;
alert("差"+Math.floor(c/3600000)+"小时"+Math.floor((c%3600000)/60000)+"分");
</script>
</html>
Lyn_0629 2009-11-06
  • 打赏
  • 举报
回复
8楼的代码貌似有问题。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧