我有一个时间/日期字符串,如下所示:
"5/31/2016, 2:23:33 PM"
。我只需要HH:MM和am / pm,所以2:23 PM
我可以将日期分开但不确定如何删除冒号和秒。
time = time.split(",")[0];
//time = " 2:23:33 PM";
感谢
答案 0 :(得分:3)
如果以日期/时间字符串开头并希望以相同格式的时间字符串结束,请考虑以下regular expression with two capture groups:
var dateStr = "5/31/2016, 2:23:33 pm";
var m = dateStr.match(/(\d{1,2}:\d{2}):\d{2}\s+?(AM|PM)/i)
// ^-- 1 ^-- 2
if (m) {
console.log(m[1] + " " + m[2].toUpperCase()); // "2:23 PM"
}
否则,如果需要处理正确的日期/时间对象,请考虑moment.js
- 并指定适当的转换格式。
我不使用new Date(nonISO8601String)
进行解析,因为它在浏览器/本地化版本中不可靠。
答案 1 :(得分:1)
<强>更新强>
正如其他人所提到的,虽然这个答案确实按预期工作,但在所有浏览器和语言环境中可能并非如此。
我的建议最好使用其中一个流行的日期库,如Moment.js,这可能被认为是目前处理此事件的事实标准。
使用日期对象
虽然通过一系列分割,正则表达式等完全可行,但使用Javascript的内置日期功能可能更容易(假设您的格式不是正常的)变化很大。)
您可以考虑编写一个函数来将您的日期解析为Date
对象,然后相应地格式化它:
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 = "5/31/2016, 2:03:33 PM";
input = formatDateStringAsTime(input);
console.log(input);
function formatDateStringAsTime(input) {
var date = new Date(input);
// Determine if it is AM or PM
var ampm = date.getHours() >= 12 ? ' PM' : ' AM';
return ('0' + (date.getHours() % 12)).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ampm;
}
考虑特定日期的库
正如其他人所提到的,如果您要在应用程序中经常执行此行为,您可以考虑使用像Date.js或Moment.js这样的库,它们就是为此而设计的。
答案 2 :(得分:1)
答案 3 :(得分:0)
你可以使用这个正则表达式分两行:
var a = new Date("5/31/2016, 2:23:33 PM");
var b = a.toLocaleTimeString().replace(/:\d{2}\s/,' ');
console.log(b)
答案 4 :(得分:0)
使用Date构造函数(和Date.parse)解析字符串在很大程度上取决于实现,并且不同于浏览器,因此不应该依赖它们。如果需要解析,请使用定制函数或库,有很多可供选择。
但重新格式化字符串不需要解析,只需提取所需的值。有许多简单的方法来操作字符串,这里有两个(注意几个小时的前导零通常只用于24小时时间格式):
// Extract h:mm ap component of a string in m/d/y h:mm:ss ap format
function getTime(s) {
var b = s.split(/\D/);
function z(n){return (n<10?'0':'')+n}
return z(b[4]) + ':' + z(b[5]) + ' ' + s.slice(-2);
}
document.write(getTime('5/31/2016, 2:23:33 PM'));
并且(虽然这不会添加前导零):
document.write(
'5/31/2016, 2:23:33 PM'.replace(/[^\s]*,\s|:\d+\s/g,' ').trim()
);