【问题标题】:How to change the format of the date now to the input format如何现在将日期的格式更改为输入格式
【发布时间】:2015-12-05 21:26:23
【问题描述】:

我正在开发一个包含表单的网站;在那种形式中,我要求用户介绍他们的生日日期,我想自动计算他们的年龄 但我对用户介绍的日期格式有问题,即 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; 
}

谢谢

【问题讨论】:

  • a 是一个字符串,b 是一个Date。所以基本上试图从另一个中减去一个就像比较苹果和橘子。这种操作没有定义。在对其执行任何操作之前,您需要先解析字符串用户输入。
  • 这就像从百货公司中减去女性一样,根本做不到
  • 我们能举个例子说明a 的样子吗?
  • 另一方面,如果你让你的用户以毫秒为单位给出他们的年龄,你的代码就可以正常工作 -> jsfiddle.net/4ywzrtsu
  • 这个问题在 StackOverflow 上总是有solution

标签: javascript date


【解决方案1】:

您可以将用户日期转换为毫秒并从那里开始工作:

var userDate = '11/11/1986';

var parts = userDate.split('/');
userDate = Date.UTC(parts[2], parseInt(parts[1], 10) - 1, parts[0]);
var diff = Date.now() - userDate;
var date = new Date(diff);

console.log(date.getUTCFullYear() - 1970);

【讨论】:

  • 表达式parseInt(parts[1], 10) - 1 可以只是parts[1] - 1,因为- 运算符无论如何都会将值强制为数字。 ;-)
【解决方案2】:

在您的代码中:

var a = new Date();

a分配一个日期。

a = document.getElementById("dat").value ;

假设 dat 是一个表单控件,这会将一个字符串分配给 a,那么 Date 现在可用于垃圾回收。

var b = new Date();

b分配一个日期。

var c = b - a;

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

您需要做的是将 a 的值解析为 Date 对象,这里有很多关于如何做到这一点的问题(您只需要一个 4 行函数,它也将验证日期,例如Date('2015-1-1') outputs different from Date(2015-01-01))。

一旦 ab 是有效的日期,那么减法将起作用并且:

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

会给你两个日期之间的天数。请注意,当您没有预料到时,四舍五入可能会使值以一种或另一种方式倾斜 1 天。如果您想要一整天,最好将两个日期的时间设置为 00:00:00,然后减去并四舍五入。

【讨论】:

    【解决方案3】:

    DD/MM/YYYY 不是标准日期(et oui, je connais cette douleur...)所以你必须破解一下:

     function f() {
       var t = document.getElementById("date").value.split('/');
       console.log(t);
       var a = new Date(t[2],t[1],t[0]);
       console.log(a);
       var b = new Date();
       console.log(b);
       var c = b - a;
       c = Math.round(c / (1000 * 60 * 60 * 24 * 365));
       alert(c);
       document.getElementById("age").innerHTML = "Votre age est " + c;
     }
    <input id="date" value="22/11/1995"/><br>
    <div id="age" ></div><br>
    
    <button onclick="f()">run</button>

    【讨论】:

      【解决方案4】:

      这对您来说可能是一种更简单的方法:

      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"));
      

      【讨论】:

      • OP 使用欧洲日期 DD/MM/YYYY 所以你的答案不起作用;)
      • 值得注意的是,这个答案是从这里复制的stackoverflow.com/questions/10008050/get-age-from-birthdate
      • @carl 没错,但它是一个答案(顺便说一句,OP 可以自己找到)
      • 您不应该使用 Date 构造函数来解析字符串,它不可靠,在这种情况下会产生不正确的结果。日期字符串应始终手动解析。
      • 不管你的理由是抄袭
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2021-08-04
      • 1970-01-01
      • 2022-07-04
      • 1970-01-01
      • 2019-02-23
      • 2013-08-11
      相关资源
      最近更新 更多