Javascript 如何将日期格式更改为输入格式

Javascript 如何将日期格式更改为输入格式,javascript,date,Javascript,Date,我正在一个包含表单的网站上工作;在这种形式下,我要求用户介绍他们的生日,我想自动计算他们的年龄 但是我对用户引入的日期格式(DD/MM/YYYY)有一个问题,我想现在将日期格式转换为相同的格式 以下是我编写的代码: function calculAge() { var a = new Date(); a = document.getElementById("dat").value ; var b = new Date(); var c = b - a; c = Math.round(c

我正在一个包含表单的网站上工作;在这种形式下,我要求用户介绍他们的生日,我想自动计算他们的年龄 但是我对用户引入的日期格式(DD/MM/YYYY)有一个问题,我想现在将日期格式转换为相同的格式

以下是我编写的代码:

 function calculAge()  
{
var a = new Date();
a = document.getElementById("dat").value ;
var b = new Date();
 var c = b - a;
 c = Math.round(c / (1000 * 60 * 60 * 24));
 alert(c);
 document.getElementById("age").innerHTML = "Votre age est "+c; 
}

谢谢

DD/MM/YYYY
不是一个标准的日期(等等,我知道了…),所以你必须修改一下:

函数f(){
var t=document.getElementById(“日期”).value.split('/');
控制台日志(t);
var a=新日期(t[2],t[1],t[0]);
控制台日志(a);
var b=新日期();
控制台日志(b);
var c=b-a;
c=数学四舍五入(c/(1000*60*60*24*365));
警报(c);
document.getElementById(“age”).innerHTML=“Votre age est”+c;
}



运行
这可能是一种更简单的方法:

function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}
alert('age: ' + getAge("1980/08/10"));
函数getAge(日期字符串){
var today=新日期();
var birthDate=新日期(日期字符串);
var age=today.getFullYear()-birthDate.getFullYear();
var m=today.getMonth()-birthDate.getMonth();
如果(m<0 | |(m==0&&today.getDate()
您可以将用户日期转换为毫秒,然后从毫秒开始工作:

var userDate='11/11/1986';
var parts=userDate.split('/');
userDate=Date.UTC(部分[2],parseInt(部分[1],10)-1,部分[0]);
var diff=Date.now()-userDate;
var日期=新日期(差异);
console.log(date.getUTCFullYear()-1970)在您的代码中:

var a = new Date();
为a指定一个日期

假设dat是一个表单控件,这将为分配一个字符串,该日期现在可用于垃圾收集

var b = new Date();
给b指定一个日期

尝试从日期中减去字符串。
-
运算符将尝试将表达式转换为数字,b将转换为其时间值,如果a是格式为DD/MM/YYYY的日期,则返回NaN。任何减去NaN的值都返回NaN

您需要做的是将a的值解析为日期对象,这里有很多关于如何做的问题(例如,您只需要一个4行函数来验证日期)

一旦a和b是有效日期,则减法将起作用,并且:

c = Math.round(c / (1000 * 60 * 60 * 24));

将给出两个日期之间的天数。请注意,舍入可能会在您不期望的情况下将值向某个方向倾斜1天。如果您想要整天,最好将两个日期的时间都设置为00:00:00,然后进行减法和取整。

a
是字符串,
b
日期
。因此,从另一个中减去一个,基本上就像把苹果和桔子比较一样。这种操作没有定义。在对字符串用户输入执行任何操作之前,您需要首先解析该字符串用户输入。这就像从百货公司中减去女性一样,无法完成。我们可以举一个例子来说明
a
会是什么样子吗?另一方面,如果您让用户以毫秒为单位给出他们的年龄,您的代码运行正常->此问题始终存在于StackOverflow.OP上使用欧洲日期DD/MM/YYYY,因此您的答案无效;)值得注意的是,这个答案是从这里抄袭的@carl这是真的,但这是一个答案(顺便说一句,OP自己也可以找到),你不应该使用日期构造函数来解析字符串,这是不可靠的,在这种情况下,会产生不正确的结果。日期字符串应始终手动解析。无论您的原因如何,这都是剽窃。
parseInt(parts[1],10)-1
表达式只能是
parts[1]-1
,因为
-
运算符无论如何都会强制值为数字。;-)
var c = b - a;
c = Math.round(c / (1000 * 60 * 60 * 24));