Javascript 为什么new date()不接受字符串并给出无效日期?

Javascript 为什么new date()不接受字符串并给出无效日期?,javascript,function,date,Javascript,Function,Date,Javascript:我有一个函数,它有一个s参数,s包含这个s=07:05:45PMs的时间是字符串形式,我想在new Date()中使用它,但出现错误,我必须获得小时分秒将此时间转换为24小时格式请帮助我输出:无效日期 function time Conversion(s) { var date=new Date(s); console.log(date); } 尝试改用Date.parse(string)。请参见。根据,您可以将日期字符串作为参数传递给日期构造函数

Javascript
:我有一个函数,它有一个s参数,s包含这个
s=07:05:45PM
s的时间是字符串形式,我想在
new Date()
中使用它,但出现错误,我必须获得小时分秒将此时间转换为24小时格式请帮助我输出:无效日期

function time Conversion(s) { 
   var date=new Date(s);    
   console.log(date); 
}
尝试改用
Date.parse(string)
。请参见。

根据,您可以将
日期字符串作为参数传递给
日期
构造函数。有许多
dateString
格式限制,在您的情况下,
dateString
(名为
s
)对于日期构造函数无效(实际上,您的
s
甚至没有任何日期,它只包含时间)

可能的解决方案是手动处理
s
参数:剪切口头部分,按
分割时间:
,然后按
年、月、日期、小时、分钟、秒的顺序将参数传递给
日期
构造函数,或者构造自己的
ISO字符串
,格式:

{year}-{month}-{date}T{hours}:{minutes}:{seconds}.{milliseconds}Z

请注意,这两种情况下的小时数都应为24小时格式,因此您应该手动处理12小时格式的小时数。

从时间字符串中删除AM/PM(需要有24小时时间字符串)


现在执行基于时间的操作。

从内置解析器中获取无效日期的原因包括

要将一个字符串(如07:05:45PM)转换为24小时时间,您可以解析部分并生成一个新字符串,如果以PM结束,则在小时中添加12;如果以AM结束,则在小时中添加12(并将12am更改为00)。e、 g

函数设置为24hr格式{

var z=n=>(n console.log(s+'=>'+to24HrFormat(s));
您正在给时间并希望它识别为日期?此外,新的日期(字符串)将需要通过date.parse()识别的字符串方法。我的理解是,您希望将给定的时间字符串转换为24小时格式。对吗?是的,我希望转换为24小时格式。然后我给出NaN。Date构造函数对字符串的解析与Date.parse相同,唯一的区别是Date.parse返回一个时间值(可能是NaN)而new Date返回一个由Date.parse返回的时间值构造的日期。OP有一个没有日期的时间。建议的字符串格式将被解析为UTC,应包含如何处理该格式的代码。此外,将时间转换为24小时格式(建议的格式也需要该格式)也没有任何帮助,这是问题的核心。@RobG好的,谢谢你的评论。我会在有空的时候尽快更新我的答案。哦,你提到的“规范”实际上是到MDN,这是一个公共wiki。实际规范是ECMA-262,当前版本是并且很快将是ECMAScript 2018;-@RobG…以及所有指向“真实规范”的必要链接MDN上存在。区别在于,MDN上的所有信息都更容易理解。当然,虽然MDN是一个很好的资源,但它不是一个规范。它使用OP字符串“07:05:45PM”将自己描述为::-)至少在Safari、Chrome和Firefox中生成一个无效日期。如果删除了PM,则时间是错误的,添加“Z”意味着它将被解析为UTC,因此按本地时区偏移量移动时间。您可能希望包括如何处理所有这些。在发布新日期之前,请在最新的Chrome中尝试此操作('1970-01-01T'+'07:05:45PM'+'Z');
这是OP的功能。如果没有am/pm,它应该是'19:05:45',像'12:15:00AM'这样的时间必须是'00:15:00'。
var time = "07:05:45";
var datetime = new Date('1970-01-01T' + time + 'Z');