Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将毫秒转换为年_Javascript_Jquery - Fatal编程技术网

Javascript 将毫秒转换为年

Javascript 将毫秒转换为年,javascript,jquery,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]); i

我有一个验证器,可以检查用户是否至少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年
以毫秒为单位,但我如何将其转换为之前的年,以便只需执行以下操作:

if (todays_date - birth_date => 18) {

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


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

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

还要注意,在JS dates中,月份是以零为基础的,因此在创建date对象时,您可能希望使用
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()) {
(在
+res[1]+18
中,前导的
+
不是打字错误,它将正则表达式提取的字符串转换为一个数字,这样您就可以向其中添加18。您不需要对
res[2]-1
执行相同的操作,因为
-
会自动转换两个操作数。)


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

有更好的方法来检查这一点(请参阅“nnnn”的答案)。但你的问题不是关于一个更好的方法,而是,你如何能转换成年

您可以编写一个这样做的函数,例如:

function convertmili( mSeconds )
{
    return mSeconds / 31536000000;
}
此函数的输出仍然不理想,因为您的示例将输出:17.9361334941654

所以我们可以把它清理一下:

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

使用此函数,您的示例将输出17,然后您可以按照自己的方式进行检查

提示:一年大约有31557600秒。“565633905872是18年的毫秒”-你确定吗?(即使你忽略闰年,这个数字也太小了…)你真的要用毫秒来比较年份吗?@nnnnnnnn:565633905872/1000/60/60/24/365=17.936……所以这并不遥远。
var x=new Date;x、 设置秒(-565633905872/1000)
将为您提供“现在”之前(大约)565633905872的日期。但是如果你只想回到18年前,
x.setFullYear(x.getFullYear()-18)
更方便。不,你不需要。闰年呢?是的:这比检查年龄有效性的好得多。
function convertmili( mSeconds )
{
    var checkYear = Math.floor(mSeconds / 31536000000);
    return checkYear;
}