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

时间:2016-05-31 18:31:36

标签: javascript date

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

"5/31/2016, 2:23:33 PM"。我只需要HH:MM和am / pm,所以2:23 PM

我可以将日期分开但不确定如何删除冒号和秒。

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

感谢

5 个答案:

答案 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.jsMoment.js这样的库,它们就是为此而设计的。

答案 2 :(得分:1)

我建议使用moment.js来解析字符串,然后输出为格式化字符串,如此

mbalex99

Fiddle

答案 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()
);