将毫秒转换为年

时间:2014-03-10 10:42:18

标签: javascript jquery

我有一个验证器,用于检查用户是否至少18岁。

这是检查:

var res = /^([1-2]\d{3})\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])\-([0-9]{4})$/.exec(str);
var todays_date = new Date();
var birth_date = null;

if (res != null) {
    birth_date = new Date(res[1], res[2], res[3]);
    if (todays_date - birth_date > 565633905872) {

565633905872在{毫秒}内是18 years,但如何将其转换为数年之前,我可以这样做:

if (todays_date - birth_date => 18) {

3 个答案:

答案 0 :(得分:5)

您引用的数字不是 18年内的毫秒数。即使你假装没有闰年,它也太小了。

测试某人是否至少18岁的最简单方法是将日期对象初始化为他们的生日,然后使用.getFullYear().setFullYear()直接设置18年前的年份。然后将其与当前日期进行比较。

另请注意,在JS日期中,月份从零开始,因此您可能希望在创建日期对象时使用res[2] - 1

birth_date = new Date(res[1], res[2] - 1, res[3]);
birth_date.setFullYear(birth_date.getFullYear() + 18);
if (birth_date <= new Date()) {

或者假设您正在构建birth_date来自个别年份,月份和日期,您可以这样做:

birthPlus18 = new Date(+res[1] + 18, res[2] - 1, res[3]);
if (birthPlus18 <= new Date()) {

+中的前导+res[1] + 18 是一个拼写错误,它会将正则表达式提取的字符串转换为数字,以便您可以为其添加18。不需要对res[2] - 1执行相同的操作,因为-会自动转换两个操作数。)

另请注意,您的正则表达式会很乐意允许指定一个月份过高的日期,例如2月30日或6月31日。

答案 1 :(得分:3)

有更好的方法可以检查这个(请参阅“nnnnnn”的答案)。但你的问题并不是一个更好的方法,而是你如何能够转变为多年。

您可以编写一个功能,例如:

function convertmili( mSeconds )
{
    return mSeconds / 31536000000;
}

此功能的输出仍远非理想,因为您的示例将输出: 17.9361334941654

所以我们可以稍微清理一下:

function convertmili( mSeconds )
{
    var checkYear = Math.floor(mSeconds / 31536000000);
    return checkYear;
}

使用此功能,您的示例将输出 17 ,然后您可以按照您想要的方式进行检查。

答案 2 :(得分:1)

将你的毫秒值除以31536000000你得到的年数

http://www.convertunits.com/from/milliseconds/to/year