`
namelessmyth
  • 浏览: 21449 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

JavaScript 计算日期间隔,生日,年龄

阅读更多

最近些项目的时候被一个小问题难住了.就是javascript计算日期间隔的问题,还有就是生日的计算

下面是从网上搜到的:

 

新建一个html,把下面的代码贴到html文件里,保存后用浏览器打开

 

1.下面的这个算法并不精确,有待高手指点.

--------------------------------------------------------------------------------
<Html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title></title>

</head>

<body>

<script language="JavaScript">

  function btnCount_Click(){

    s1 = document.getElementById('sdate1').value;

    s2 = document.getElementById('sdate2').value;

    DateDiff(s1,s2);

  }

  //计算天数差的函数,通用

  function DateDiff(sDate1, sDate2){  //sDate1和sDate2是2002-12-18格式

    var aDate, oDate1, oDate2, iDays

    aDate = sDate1.split("-")

    oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])  //转换为12-18-2002格式

    aDate = sDate2.split("-")

    oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])

    iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24)  //把相差的毫秒数转换为天数
   
    month = Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24 /30
   
    year = Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24 /365//误差就在这里,这个地方把一年当成了365天

   
    alert('Day:'+iDays+' Month:'+month+' Years:'+ year +'\nage:' + Math.floor(year));

    return iDays

  }

</script>

<input type = 'text' id = 'sdate1' />
<br>
<input type = 'text' id = 'sdate2' />
<br>
<button onClick=" btnCount_Click()">第一种计算</button><br>

</body>


--------------------------------------------------------------------------------

下面是第二种计算方法(推荐):


--------------------------------------------------------------------------------

<body>
<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function run() {
with (document.agecalc) {
dd = parseInt(day.selectedIndex) + 1;
mm = parseInt(month.selectedIndex) + 1;
yy = year.value;
if (yy.length != 4 || isNaN(yy)) {
document.agecalc.timealive.value = "年份数请输入四位.";
document.agecalc.year.select();
document.agecalc.year.focus();
return;
    }
}
days = new Date();
gdate = days.getDate();
gmonth = days.getMonth();
gyear = days.getYear();
if (gyear < 2000) gyear += 1900;
age = gyear - yy;
if ((mm == (gmonth + 1)) && (dd <= parseInt(gdate))) {
age = age;
} else {
if (mm <= (gmonth)) {
age = age;
} else {
age = age - 1;
    }
}
if (age == 0)
age = age;
document.agecalc.timealive.value = "你已经" + age+ " 了 . . .\n\n";
if (mm <= (gmonth + 1))
age = age - 1;
if ((mm == (gmonth + 1)) && (dd > parseInt(gdate)))
age = age + 1;
var m;
var n;
if (mm == 12) n = 31 - dd;
if (mm == 11) n = 61 - dd;
if (mm == 10) n = 92 - dd;
if (mm == 9) n = 122 - dd;
if (mm == 8) n = 153 - dd;
if (mm == 7) n = 184 - dd;
if (mm == 6) n = 214 - dd;
if (mm == 5) n = 245 - dd;
if (mm == 4) n = 275 - dd;
if (mm == 3) n = 306 - dd;
if (mm == 2) { n = 334 - dd; if (leapyear(yy)) n++; }
if (mm == 1) { n = 365 - dd; if (leapyear(yy)) n++; }
if (gmonth == 1) m = 31;
if (gmonth == 2) {
m = 59;
if (leapyear(gyear)) m++;
}
if (gmonth == 3)   { m = 90;   if (leapyear(gyear)) m++; }
if (gmonth == 4)   { m = 120; if (leapyear(gyear)) m++; }
if (gmonth == 5)   { m = 151; if (leapyear(gyear)) m++; }
if (gmonth == 6)   { m = 181; if (leapyear(gyear)) m++; }
if (gmonth == 7)   { m = 212; if (leapyear(gyear)) m++; }
if (gmonth == 8)   { m = 243; if (leapyear(gyear)) m++; }
if (gmonth == 9)   { m = 273; if (leapyear(gyear)) m++; }
if (gmonth == 10) { m = 304; if (leapyear(gyear)) m++; }
if (gmonth == 11) { m = 334; if (leapyear(gyear)) m++; }
if (gmonth == 12) { m = 365; if (leapyear(gyear)) m++; }
months = age * 12;
months += 12 - parseInt(mm);
months += gmonth;
totdays = (parseInt(age) * 365);
totdays += age / 4;
totdays = parseInt(totdays) + gdate + m + n;
if (gmonth == 1) p = 31 + gdate;
if (gmonth == 2) {
p = 59 + gdate;
if (leapyear(gyear)) m = m+1;
}
if (gmonth == 3)   { p = 90 + gdate;   if (leapyear(gyear)) p++; }
if (gmonth == 4)   { p = 120 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 5)   { p = 151 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 6)   { p = 181 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 7)   { p = 212 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 8)   { p = 243 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 9)   { p = 273 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 10) { p = 304 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 11) { p = 334 + gdate; if (leapyear(gyear)) p++; }
if (gmonth == 12) { p = 365 + gdate; if (leapyear(gyear)) p++; }
weeks = (age * 365) + n + p;
weeks = weeks / 7;
etcdays = parseFloat(weeks) - parseInt(weeks);
etcdays = Math.round(etcdays * 7);
weeks = parseInt(weeks);
etcdays += parseInt(age / 4);
if (etcdays > 7)
weeks += parseInt(etcdays / 7);
document.agecalc.timealive.value += "      或者 " + weeks + " 个星期\n";
document.agecalc.timealive.value += "      或者 " + months + " 个月\n";
document.agecalc.timealive.value += "      或者 " + totdays + " 天\n";
var time = new Date();
ghour = time.getHours();
gmin = time.getMinutes();
gsec = time.getSeconds();
hour = ((age * 365) + n + p) * 24;
hour += (parseInt(age / 4) * 24);
document.agecalc.timealive.value += "      或者 " + hour + " 小时了\n";
var min = (hour * 60) + gmin;
document.agecalc.timealive.value += "      或者 " + min + " 分了\n";
sec = (min * 60) + gsec;
document.agecalc.timealive.value += "      或者 " + sec + " 秒了";
mm = mm - 1;
var r;
if (mm == 0) r = 0;
if (mm == 1) r = 31;
if (mm == 2) { r = 59; if (leapyear(gyear)) m++; }
if (mm == 3)   { r = 90;   if (leapyear(gyear)) r++; }
if (mm == 4)   { r = 120; if (leapyear(gyear)) r++; }
if (mm == 5)   { r = 151; if (leapyear(gyear)) r++; }
if (mm == 6)   { r = 181; if (leapyear(gyear)) r++; }
if (mm == 7)   { r = 212; if (leapyear(gyear)) r++; }
if (mm == 8)   { r = 243; if (leapyear(gyear)) r++; }
if (mm == 9)   { r = 273; if (leapyear(gyear)) r++; }
if (mm == 10) { r = 304; if (leapyear(gyear)) r++; }
if (mm == 11) { r = 334; if (leapyear(gyear)) r++; }
mm = mm + 1;
r = parseInt(r) + parseInt(dd);

if ((mm >= (gmonth + 1)) && (dd > gdate)) {
bday = r - m - gdate;
}
else {
if ((leapyear(gyear)) && ((mm > 2) && (dd < 29))) {
a = 366;
} else {
a = 365;
}
bday = a + (r - m - gdate);
}
nhour = 24 - parseInt(ghour);
nmin = 60 - parseInt(gmin);
nsec = 60 - parseInt(gsec);
while (bday > 366) bday -= 365;
if (((bday == 366) && (leapyear(gyear)) || ((bday == 365) && (!leapyear(gyear))))) {
document.agecalc.timealive.value += "\n\n今天是你的生日!";
} else {
document.agecalc.timealive.value += "\n\n你离下一个生日还有:\n"
+ bday + " 天 " + nhour + " 小时 " + nmin + " 分 " + nsec + " 秒";
setTimeout("run()", 1000);
    }
}
function leapyear(a) {
if (((a%4 == 0) && (a%100 != 0)) || (a%400 == 0))
return true;
else
return false;
}
//   End -->
</script>

<form name=agecalc>
<table>
<tr><td align=center>
请输入你的生日:   <select name=month size=1>
<option>一月
<option>二月
<option>三月
<option>四月
<option>五月
<option>六月
<option>七月
<option>八月
<option>九月
<option>十月
<option>十一月
<option>十二月
</select>

<select name=day size=1>
<option>1
<option>2
<option>3
<option>4
<option>5
<option>6
<option>7
<option>8
<option>9
<option>10
<option>11
<option>12
<option>13
<option>14
<option>15
<option>16
<option>17
<option>18
<option>19
<option>20
<option>21
<option>22
<option>23
<option>24
<option>25
<option>26
<option>27
<option>28
<option>29
<option>30
<option>31
</select>
<input type=text name=year size=4 maxlength=4>
<br>
<input type=button name=start value="计算" onclick="run();"><br>
<br>
<textarea rows=12 cols=35 name=timealive></textarea>
</td></tr>
</table>
</form>
</body>

分享到:
评论

相关推荐

    根据生日计算年龄JS

    ### 根据生日计算年龄的JavaScript方法 在日常开发中,我们经常需要处理与日期相关的逻辑,例如根据用户的出生日期来计算其年龄。这在很多应用场景下都非常实用,比如用户注册、年龄验证等功能。下面将详细介绍如何...

    日期时间间隔计算

    日期时间间隔计算是编程领域中常见的一种需求,尤其在数据分析、日程管理或者任何与时间相关的应用程序中。这个话题涉及到的主要知识点包括日期处理、时间间隔计算以及可能的编程语言实现。 1. **日期处理**:在...

    kettle中使用js计算年龄.txt

    kettle中使用js计算年龄

    基于javascript bootstrap实现生日日期联动选择

    本文实例为大家分享了js实现日期联动选择的相关代码,适用于生日的选择,供大家参考,具体内容如下 实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日...

    两个时间间隔的天数

    这段代码提供了一个JavaScript函数 `functionDateDiff`,用于计算两个日期字符串之间相隔的天数。 #### 函数解析 - **参数**: - `sDate1`:表示起始日期的字符串。 - `sDate2`:表示结束日期的字符串。 - 这两...

    年龄计算器 精确计算出您的时间段

    2. **时间间隔计算**:在计算年龄时,需要考虑到闰年的影响,因为闰年有366天而非常见的365天。计算时需确保在2月29日出生的人在非闰年中不会丢失一天的年龄。 3. **格式化输出**:计算出的年龄需要以用户友好的...

    kettle中使用js计算两个日期之间的天数.txt

    kettle中使用js计算两个日期之间的天数

    javascript实现日期选择

    ### JavaScript 实现日期选择 #### 知识点概述 本文将详细介绍如何利用JavaScript来实现一个功能强大的日期选择器。此日期选择器不仅包含了基础的日期显示功能,还提供了丰富的自定义选项,例如添加指定时间间隔、...

    JavaScript天数计算

    通过以上知识点的学习,我们可以了解到如何在JavaScript中进行日期和时间的计算,包括创建日期对象、获取日期值、计算日期差以及实现定时更新等功能。这些知识对于开发涉及时间计算的应用非常有用。

    用javascript实现计算两个日期的间隔天数

    代码如下:// 计算两个日期的间隔天数 function DateDiff(sDate1, sDate2){ //sDate1和sDate2是2002-12-18格式 var aDate, oDate1, oDate2, iDays aDate = sDate1.split(“-“) oDate1 = new Date...

    根据身份证号码计算出生日期、年龄、性别(18位) 根据入职时间计算工龄

    值得注意的是,计算年龄时要考虑是否需要进位的问题,以及计算工龄时要注意日期格式的转换和时间差的正确计算。代码片段中还包含了一些HTML元素选择器,这说明这段代码可能是一个网页应用的一部分。在实际应用中,还...

    javascript时间计算

    ### JavaScript时间计算知识点详解 #### 一、背景介绍 ...通过上述解析,我们可以看到JavaScript提供了非常灵活的方式来处理日期与时间,只要理解了基本原理,就能轻松应对各种复杂的日期时间计算需求。

    JavaScript小数点精确计算

    JavaScript中的小数点精确计算是开发者经常会遇到的一个挑战。由于JavaScript内部使用的是IEEE 754标准来存储和处理浮点数,这可能导致在进行小数运算时出现精度丢失问题,尤其是在涉及大数字或者循环计算时。本篇将...

    日期计算控件

    这个是一个计算日期的控件,比JS自带的计算日期要准确且很强大。

    js内计算日期差

    根据给定的文件内容,我们可以总结出以下几个JavaScript中与日期处理相关的知识点: ### 1. 格式化日期 在JavaScript中,有时我们需要将日期格式化为特定的格式,例如`YYYY-MM-DD`。文件中提供了`formatDate`函数...

    JavaScript计算性能对比研究.pdf

    JavaScript计算性能对比研究 本文对JavaScript的计算性能进行了研究,对比了JavaScript和主流编程语言Java、C++、MATLAB等语言的计算能力、数据精度以及处理时间。研究发现,在较大迭代次数条件下,JavaScript与C++...

    JS 获得两个时间间隔天数

    在这个方法中,我们将探讨如何利用JavaScript的内置Date对象以及一些基本的算术运算来计算日期间隔。 首先,我们需要创建两个Date对象,分别表示我们想要比较的两个日期。例如: ```javascript var date1 = new ...

    现代Javascript日期工具库

    5. **时间间隔计算**:`differenceInDays`、`differenceInMonths`等可以计算两个日期之间的时间差。 6. **时间操作**:例如设置小时、分钟和秒,`setHours`、`setMinutes`等函数使这变得简单。 7. **时间间隔的遍历*...

    JavaScript写的小游戏(计算二十四)

    JavaScript编写的小游戏“计算二十四”是一种非常有趣且富有挑战性的数学智力游戏,旨在锻炼玩家的逻辑思维和快速计算能力。这款游戏的目标是通过基本的数学运算(加法、减法、乘法、除法)将四张牌上的数字组合成24...

    时间间隔自动计算,自己做着玩

    在IT领域,自动计算时间间隔是一项基础且实用的技术,尤其在数据分析、日志处理和实时监控等场景中广泛应用。这个项目“时间间隔自动计算”似乎是一个个人开发的工具,用于处理和分析时间数据,帮助用户便捷地计算两...

Global site tag (gtag.js) - Google Analytics