Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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——切片时间字符串以返回HH:MM_Javascript_Date - Fatal编程技术网

JavaScript——切片时间字符串以返回HH:MM

JavaScript——切片时间字符串以返回HH:MM,javascript,date,Javascript,Date,我有一个返回的时间/日期字符串,如下所示: “2016年5月31日下午2:23:33”。我只需要HH:MM和am/pm,所以2:23 pm 我可以分割日期,但不确定如何删除冒号和秒 time = time.split(",")[0]; //time = " 2:23:33 PM"; 谢谢更新 formatDateStringAsTime("5/31/2016, 2:23:33 PM"); // yields 2:23 PM 正如其他人所提到的,尽管这个答案确实如预期的那样有效,但并非所有

我有一个返回的时间/日期字符串,如下所示:

“2016年5月31日下午2:23:33”
。我只需要HH:MM和am/pm,所以
2:23 pm

我可以分割日期,但不确定如何删除冒号和秒

time = time.split(",")[0]; 
//time = " 2:23:33 PM";

谢谢更新

formatDateStringAsTime("5/31/2016, 2:23:33 PM"); // yields 2:23 PM 
正如其他人所提到的,尽管这个答案确实如预期的那样有效,但并非所有浏览器和地区都是如此

我的建议是最好使用一个流行的日期库,如,它可以被认为是目前处理这个问题的事实标准

使用日期对象

虽然通过一系列拆分、正则表达式等完全可行,但只使用一些Javascript内置的日期功能可能更容易(假设格式不会有太大的变化)

您可以考虑编写一个函数,将日期解析为对象,然后相应地格式化:

function formatDateStringAsTime(input){
  var date = new Date(input);
  // Determine if it is AM or PM
  var ampm = date.getHours() >= 12 ? ' PM' : ' AM';
  // Output what you need
  return (date.getHours() % 12) + ':' + date.getMinutes() + ampm;
}
此外,如果要确保有两个数字(即零填充值),可以使用一点切片来更改:

// Using this approach will pad your hours and minutes with zeros if necessary
return ('0' + (date.getHours() % 12)).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ampm;
示例

formatDateStringAsTime("5/31/2016, 2:23:33 PM"); // yields 2:23 PM 
var input=“2016年5月31日下午2:03:33”;
输入=formatDateStringAsTime(输入);
控制台日志(输入);
函数formatDateStringAsTime(输入){
var日期=新日期(输入);
//确定是上午还是下午
var ampm=date.getHours()>=12?'PM':'AM';
return('0'+(date.getHours()%12)).slice(-2)+:'+('0'+date.getMinutes()).slice(-2)+ampm;
}
考虑特定日期的库

正如其他人所提到的,如果要在应用程序中频繁执行此行为,可以考虑使用类似于或完全是针对这样的库。 我建议使用解析字符串,然后将其输出为如下格式的字符串

var input = "5/31/2016, 2:23:33 PM";
var result = moment(input);

console.log(result.format("hh:mm a"));
//output: 02:23 pm

您可以使用此正则表达式在两行中完成:

var a = new Date("5/31/2016, 2:23:33 PM");

var b = a.toLocaleTimeString().replace(/:\d{2}\s/,' ');
console.log(b)

如果以日期/时间字符串开始,并希望以相同格式的时间字符串结束,请考虑以下内容:

否则,如果需要处理一个适当的日期/时间对象,我会考虑<代码> Time.js<代码>,并指定适当的转换格式。


我不会使用
new Date(nonISO8601String)
进行解析,因为它在浏览器/本地化中不可靠。

使用日期构造函数(和Date.parse)解析字符串在很大程度上依赖于实现,并且在浏览器之间不一致,因此不应该依赖它。如果需要解析,请使用定制的函数或库,有很多可供选择

但是重新格式化字符串不需要解析,只需要提取所需的值。操作字符串的简单方法有很多种,这里有两种(请注意,小时的前导零通常仅用于24小时时间格式):

//以m/d/y h:mm:ss ap格式提取字符串的h:mm ap组件
函数getTime(s){
var b=s.split(/\D/);

函数z(n){return(n我问你为什么要这么做,而你可以使用
Date
对象上存在的函数轻松获得小时和分钟数?下面是一个例子:
newdate(str)
仅在某些格式上定义良好。对于非ISO-8601的日期,我避免使用此雷区。答案很好,正是我所建议的,但是,我是否可以建议放弃看似不必要的if语句?谢谢Brynden。我使用if方法只是为了提供一个关于实际情况的想法,因为我认为这可能有点不必要对一些人来说更清楚,因为这根本不是一个优化的方法。谢谢。除了一个小问题外,它工作得非常完美:当分钟数为0-9时,它们不会以“0”作为前缀。例如,下午5:9。只需FYIRight,如果你想显式地将它们填充到两位数,你可以使用
(“0”+(date.getHours()%12)).slice(-2);
几个小时。我会相应地更新答案。如果您使用moment.js解析字符串,您还应该告诉它要解析的格式,否则您将完全听天由命。此答案要求使用日期构造函数正确解析随机字符串,并且toLocaleTimeString返回的值将遵循特定的ar格式。语言规范不支持这两种假设。