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格式。语言规范不支持这两种假设。