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

zzoitvuj  于 2023-04-04  发布在  Java
关注(0)|答案(5)|浏览(134)

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

function time Conversion(s) { 
   var date=new Date(s);    
   console.log(date); 
}
6qqygrtg

6qqygrtg1#

根据specification,你可以将dateString作为参数传递给Date构造函数。这里有一堆dateString限制,在你的情况下,你的dateString(名为s)对于日期构造函数是无效的(实际上,你的s甚至没有任何日期,它只包含时间)。
可能的解决方案是手动处理s参数:剪切文字部分,按:分割时间,然后按顺序year, month, date, hours, minutes, seconds将参数传递给Date构造函数,或者构造自己的ISO String,格式为:

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

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

6ju8rftf

6ju8rftf2#

Why does Date.parse give incorrect results?中介绍了从内置解析器获得无效Date的原因
要将字符串(如07:05:45PM)转换为24小时时间,您可以解析这些部分并生成一个新字符串,如果它以PM结束,则向小时添加12,如果它以AM结束,则不添加(并将12am更改为00)。

function to24HrFormat(s) {
  var z = n => (n<10?'0':'')+n;
  var b = s.match(/\d+/g);
  var ap = /am$/i.test(s)? 0 : 12;
  return z((b[0]%12) + ap) + ':' + b[1] + ':' + b[2];
}

// Tests
['07:05:45PM', '06:23:49AM', '12:15:00AM', '11:59:59pm']
  .forEach(s => console.log(s + ' => ' + to24HrFormat(s)));

您应该验证输入字符串,并可能允许缺失秒数。

jei2mxaa

jei2mxaa3#

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

var time = "07:05:45";
var datetime = new Date('1970-01-01T' + time + 'Z');

现在做你的基于时间的操作。

p1tboqfb

p1tboqfb4#

function to24HrFormat(s) {
  var z = n => (n<10?'0':'')+n;
  var b = s.match(/\d+/g);
  var ap = /am$/i.test(s)? 0 : 12;
  return z((b[0]%12) + ap) + ':' + b[1] + ':' + b[2];
}

// Tests
['07:05:45PM', '06:23:49AM', '12:15:00AM', '11:59:59pm']
  .forEach(s => console.log(s + ' => ' + to24HrFormat(s)));
xzv2uavs

xzv2uavs5#

请尝试使用Date.parse(string)。参见referene

相关问题