几年前的javascript时间戳,考虑闰年

时间:2012-07-31 10:02:30

标签: javascript datetime date timestamp

我将用户的出生日期存储在时间戳中。我用javascript计算时间戳。

day = $("#birthday-day").val();
year = $("#birthday-year").val();
month = $("#birthday-month").val()-1;     
date = new Date(Date.UTC(year, month, day));
birthdateTimestamp = Math.round(date.getTime() / 1000);

在“搜索”页面中,我只有年龄字段。依赖于此字段,我需要显示与此年龄匹配的用户。我从年龄字段值时间戳计算,所以我可以在数据库中使用它作为条件。

now = new Date();
age = $("#age").val();
date = new Date(Date.UTC(now.getFullYear()-age));
timestampYearsAgo = date.getTime()/1000;

我的问题: 这些方法是否可以安全运行,还是因为闰年而有任何问题?我很确定第一部分是好的(如果没有请,请纠正我),但是对于第二部分,当我从年龄计算时间戳时,我不知道怎么可能做到闰年也被考虑。有人有任何想法吗?

TNX

2 个答案:

答案 0 :(得分:1)

您在第二个样本中创建的日期对应于给定年份的1/1(因为您只提供年,日和月默认为0)。这可能不是你想要的。

如果你想要今天特定年龄的人,你应该创建一个与今天相对应的日期,然后减去这些年份,例如:

var lowDate = new Date;
lowDate.setFullYear(lowDate.getFullYear() - age));
lowTimestamp = lowDate.getTime()
var highDate = new Date;
highDate .setFullYear(highDate .getFullYear() - age + 1));
highTimestamp = highDate.getTime()

如果生日时间戳介于lowTimestamp和highTimestamp之间,则年龄是正确的。

答案 1 :(得分:0)

没关系,Date对象会占用你的闰年而不是闰秒:)

如果您经常使用日期,可能需要查看类似http://tempus-js.com/的内容,其中包括api方法,例如isLeapYear()。