解析字符串时间到JS日期对象

休·勒

我正在尝试将时间字符串转换为"7:30am"JavaScript Date ObjectSat Nov 18 2017 7:30:00 GMT-0500 (EST)

我的方法:

function dateObj(d) { // date parser ...
  var parts = d.split(/:|\s/),
    date  = new Date();
  if (parts.pop().toLowerCase() == 'pm') parts[0] = (+parts[0]) + 12;
    date.setHours(+parts.shift());
    date.setMinutes(+parts.shift());
        return date
}
var startTime = "7:30";
var endTime   = "9:30pm";
var startDate = dateObj(startTime); // get date objects
var endDate   = dateObj(endTime);
console.log(startDate, endDate)

我对startDate和endDate都获得了无效日期。

试试这里:

function dateObj(d) { // date parser ...
    var parts = d.split(/:|\s/),
        date  = new Date();
    if (parts.pop().toLowerCase() == 'pm') { 
       parts[0] = parts[0] + 12; 
    }
    date.setHours(parts.shift());
    date.setMinutes(parts.shift());
		return date
}
var startTime = "7:30am";
var endTime   = "9:30pm";
var now       = new Date();
var startDate = dateObj(startTime); // get date objects
var endDate   = dateObj(endTime);
var test = dateObj(startTime)
console.log(startDate, endDate)

吉尔·费尔南德斯

我宁愿使用正则表达式提取日期元素,还为日期格式无效的情况添加一些错误处理。

并且不要忘记也要处理12am和12pm。这需要代码中的额外处理。

见下文:

function dateObj(d) { // date parser ...
  const rx = /(\d{1,2})\:(\d{1,2})\s*(am|pm)/g;
  const parts = rx.exec(d);
  if (parts === null) {
    return "Not a valid date: " + d;
  }
  date = new Date();
  const amPm = parts.pop().toLowerCase();
  const hour = parseInt(parts[1]);
  if (amPm === 'pm') {
    if (hour !== 12) {
      parts[1] = (parseInt(parts[1])) + 12;
    }
  } else if (amPm === 'am' && hour === 12) {
    parts[1] = 0;
  }
  date.setHours(parts[1]);
  date.setMinutes(parts[2]);
  return date
}

var startTime = "7:30";
var endTime = "9:30pm";
var startDate = dateObj(startTime); // get date objects
var endDate = dateObj(endTime);

console.log(startDate, endDate)
console.log(dateObj("7:30 pm"))
console.log(dateObj("7:30 am"))
console.log(dateObj("7:30am"))
console.log(dateObj("12:30pm"))
console.log(dateObj("12:30 am"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章