我想计算任何事情的年龄。我已经写了这个程序。我拿了一个日期对象并为其赋值$birth_date=new Date('Dec,15,1992');
然后我用当前数据减去该值。根据减法它应该返回23年0个月14天。但它返回23年4个月14天。年日子还可以,但月份误导了。
以下代码是HTML,旁边是Javascript
$(document).ready(function(){
var birth_date = new Date('Dec, 15, 1992').getTime();
var years,months,days, hours, minutes, seconds;
var ageCount = document.getElementById('counter');
setInterval(function(){
var current_date = new Date().getTime();
var total_sec =(current_date-birth_date) / 1000;
years=parseInt(total_sec/(86400*30*12));
var second_left=total_sec%(86400*30*12);
months=parseInt(second_left/(86400*30));
second_left=second_left%(86400*30);
days=parseInt(second_left/86400);
second_left=second_left%(86400);
hours=parseInt(second_left/3600);
second_left=second_left%3600;
minutes=parseInt(second_left/60);
seconds=parseInt(second_left%60);
ageCount.innerHTML=years+' Years '+months+' Months '+days+' Days '+hours+
' Hours '+minutes+' Minutes '+seconds+' Seconds';
},500);
});
<div id="counter">
</div>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
答案 0 :(得分:0)
我认为仅使用列出here的基本符号来获取日期差异,日期,小时,分钟,秒等指标会更有意义
$(document).ready(function(){
var birth_date = new Date('Feb, 15, 1992');
var years,months,days, hours, minutes, seconds;
var ageCount = document.getElementById('counter');
setInterval(function(){
var current_date = new Date();
var YearDiff = (current_date.getYear() - birth_date.getYear());
var monthDiff = (current_date.getMonth() - birth_date.getMonth());
var daysDiff = (current_date.getDate() - birth_date.getDate());
var hoursDiff = (current_date.getHours() - birth_date.getHours());
var minDiff = (current_date.getMinutes() - birth_date.getMinutes());
var secDiff = (current_date.getSeconds() - birth_date.getSeconds());
ageCount.innerHTML=YearDiff+' Years '+monthDiff+' Months '+daysDiff+' Days '+hoursDiff+
' Hours '+minDiff+' Minutes '+secDiff+' Seconds';
},500);
});
答案 1 :(得分:-1)
您只需使用以下实现进行此计算即可。
https://jsfiddle.net/wqm704xm/1/
var birthday = new Date('Dec,15,1992');
var today;
var $dateEl = document.getElementById('date');
setInterval(writeValue, 100);
function writeValue() {
today = new Date();
var calculatedDate = calculate(normalizeDate(birthday), normalizeDate(today));
$dateEl.innerHTML =
'years: ' + calculatedDate.year + '<br>' +
'months: ' + calculatedDate.month + '<br>' +
'days: ' + calculatedDate.day + '<br>' +
'hours: ' + calculatedDate.hours + '<br>' +
'minutes: ' + calculatedDate.minutes + '<br>' +
'seconds: ' + calculatedDate.seconds + '<br>'
;
}
function calculate(firstDate, currentDate) {
return {
year: currentDate.year - firstDate.year,
month: currentDate.month - firstDate.month,
day: currentDate.day - firstDate.day,
hours: currentDate.hours - firstDate.hours,
minutes: currentDate.minutes - firstDate.minutes,
seconds: currentDate.seconds - firstDate.seconds
}
}
function normalizeDate(date) {
return {
year: date.getFullYear(),
month: date.getMonth() + 1,
day: date.getDate(),
hours: date.getHours(),
minutes: date.getMinutes(),
seconds: date.getSeconds()
};
}
<div id="date"></div>
答案 2 :(得分:-3)
月份不正确,因为您假设每个月只有30天,而月份可以是28天,29天,30天或31天(在某些情况下,其他长度)。
要快速查看出错的地方,忽略闰年,每月30天/每天将意味着30 * 12,每年只有360天。这意味着每年你错过5天。因此,给定23年,这大约是23 * 5天的差异,或者〜4个月。
在您的约会和现在之间有5个闰年,相隔5天。这完全占你4个月(120天)。
您需要调整算法以解决这些差异。
其他信息:
如果您在生产代码中使用此代码并要求准确的日期 - 请记住,日期不足以计算天数方面的精确差异。您还需要时区和位置等信息,并处理各种可爱的时间中断。
例如:2011年Samoa jumped to the other side of the international date line。因此29-Dec-2011
至1-Jan-2012
在澳大利亚的时间比在萨摩亚长1天。
(╯°□°)╯(┻━┻