来自12小时格式的日期和时间字符串的JavaScript新日期

时间:2014-06-25 17:38:26

标签: javascript string date datetime time

示例字符串:2014-12-31 11:59 pm

目前,JavaScript甚至没有解析时间,因为结果时间码返回12:00 am,无论我提供什么时间。

new Date("2014-12-31 11:59 pm")后的输出结果为:2014-12-31 12:00 am

修改

即使在期望格式并手动解析字符串之后,new Date()构造函数仍然没有...

var sourceTime = "2014-12-31 11:59 pm";

var dateRaw = sourceTime.split(' ');
var dateYMD = dateRaw[0].split('-');
var dateTime = dateRaw[1].split(':');
var dateAmPm = dateRaw[2].toLowerCase();

// Adjust human month to system month...
dateYMD[1] = (parseInt(dateYMD[1]) - 1).toString();

// Convert 12h to 24h...
if(dateAmPm == 'pm') {
  if(parseInt(dateTime[0]) < 12) dateTime[0] = (parseInt(dateTime[0])+12).toString();
} else {
  if(parseInt(dateTime[0]) == 12) dateTime[0] = 0;
}

console.log(dateYMD);
console.log(dateTime);

var dateParsed = new Date(dateYMD[0], dateYMD[1], dateYMD[2], dateTime[0], dateTime[1]);

控制台日志显示传递给new Date()的正确值但我仍然得到错误的输出:(

3 个答案:

答案 0 :(得分:2)

在使用日期时,我总是使用Moment.js而不是使用JavaScript中的标准Date。使用不同格式的日期和自定义所有内容非常容易。

在您的情况下,您可以执行以下操作:

var datestr = "2014-12-31 11:59 pm";
var date = moment(datestr,"YYYY-MM-DD HH:mm a")
$("#log").text(date.format("HH:mm:SS MMM DD YYYY"));

这是一个jsfiddle来试试。

答案 1 :(得分:0)

据我所知,不可能在JavaScript中更改由Date构造函数或Date.parse()解析的Date String的格式。格式规范可以在RFC822ECMAScript Standards找到,也不支持上午/下午。

(取自MDN

的链接

答案 2 :(得分:0)

我已经解决了我的问题..解决方案..

 let ThisDate = this.startDate0;
 let FinalYear = ThisDate.substring(6,10);
 let FinalMonth = ThisDate.substring(3,5);
 let FinalDay = ThisDate.substring(0,2);
 let FinalHour = ThisDate.substring(11, 13);
 let FinalMinutes = ThisDate.substring(14,16);
 let FinalDate = FinalYear + "-" + FinalMonth + "-" + FinalDay + " " + FinalHour + ":" + FinalMinutes;