Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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仅在IOS浏览器中返回NaN_Javascript_Html_Ios_Web_Nan - Fatal编程技术网

Javascript仅在IOS浏览器中返回NaN

Javascript仅在IOS浏览器中返回NaN,javascript,html,ios,web,nan,Javascript,Html,Ios,Web,Nan,我正在制作这个年龄计算器网站,它使用JS中的Date对象,通过减去当前时间(以毫秒为单位)和用户的出生日期(以毫秒为单位),以不同的单位(年、月、日等)计算他们的年龄,并将其输出到html 它在windows和android上完全可用,但是,当网站加载到IOS时,它返回NaN。我不知道这是否与parseInt()函数有关,或者与在这两个平台中自动完成的、在IOS中没有完成的操作有关。以下是供参考的网站: 让currentTime=Date.now(); 生日=新的日期(2002+'-'+07+

我正在制作这个年龄计算器网站,它使用JS中的Date对象,通过减去当前时间(以毫秒为单位)和用户的出生日期(以毫秒为单位),以不同的单位(年、月、日等)计算他们的年龄,并将其输出到html

它在windows和android上完全可用,但是,当网站加载到IOS时,它返回NaN。我不知道这是否与parseInt()函数有关,或者与在这两个平台中自动完成的、在IOS中没有完成的操作有关。以下是供参考的网站:


让currentTime=Date.now();
生日=新的日期(2002+'-'+07+'-'+04);//例子
让生日=Date.parse(生日);
让年龄=当前时间-生日;
let YearSeld=parseInt(年龄/1000/60/60/24/365,10);
设yearsOldInMs=yearseld*365*24*60*60*1000;
设monthsOld=parseInt((年龄-岁soldinms)/1000/60/60/24/30.417,10);
设monthsOldInMs=monthsOld*30.417*24*60*60*1000;
let Daysaled=parsint((年龄-(年soldinms+月soldinms))/1000/60/60/24,10);
设daysOldInMs=daysaled*24*60*60*1000;
设hoursOld=parseInt((年龄-(年soldinms+月soldinms+日soldinms))/1000/60/60,10);
设hoursOldInMs=hoursOld*60*60*1000;
let minutesOld=parseInt((年龄-(年soldinms+月soldinms+日soldinms+小时soldinms))/
1000 /
60,
10
);
minutesOldInMs=minutesOld*60*1000;
设secondsell=parseInt(
(年龄-
(一年)+
蒙索丁斯+
日光浴+
小时数+
分钟(秒)/
1000,
10
);

这是它计算年龄的一部分。我省略了JS中不必要的部分,例如它将结果输出到HTML的位置。

您将日期对象传递到其中,这需要一个字符串

您的代码:

birthday = new Date(formYear + '-' + formMonth + '-' + formDay);

birthday = Date.parse(birthday); // NaN
将最后一行更改为:

birthday = Date.parse(birthday.toString());
更新:

OP评论说问题出在
new date()
的非标准日期字符串输入上,而不是调用
date.parse()

日期字符串输入已修复,但对
date.parse()
的调用仍然错误(尽管某些浏览器可能仍然可以使用它)

Date.parse需要一个字符串参数,来自:

日期字符串
表示ISO 8601日历日期扩展格式简化的字符串。(可以使用其他格式,但结果取决于实现。)

即使要将有效的日期字符串传递给date.parse,也应该避免完全使用date.parse,因为不同的主机解析日期字符串的方式不同。来自MDN:

不建议使用
Date.parse
,因为在ES5之前,字符串的解析完全依赖于实现。在不同的主机解析日期字符串的方式上仍然存在许多差异,因此应该手动解析日期字符串(如果要容纳许多不同的格式,库可以提供帮助)


代码中的问题是,当您使用
2002+'-'+07+'-'+04
时,有两个问题,首先,当您使用前导零(0)定义一个数字时,它认为该数字是一个八进制整数,因此您不能使用like
09
08
。 其次,如果您评估
2002+'-'+07+'-'+04
,它将是
2002-7-4
,根据JS规范文档,这不是一个有效的日期,Chrome和Firefox足够聪明,可以将该字符串解析为日期值,但Safari认为这是一个无效的值。 您可以这样做:

let birthday = new Date(2002,7,4);

另外,您定义了两次
生日
,因此只能定义一次

  let birthday = new Date(2002,7,4); // example

  birthday = Date.parse(birthday);

不,问题是这个日期格式不在正式的JS规范中。但无论如何,谢谢您代码仍然是错误的,您需要修复
Date.parse
行。看我上面的更新。哦,我不知道Date.parse的危险!谢谢,我将使用getTime方法。是的,它很有效,谢谢。我没有意识到不同的浏览器有这么大的不同。
let birthday = new Date(2002,7,4);

  let birthday = new Date(2002,7,4); // example

  birthday = Date.parse(birthday);