【问题标题】:JavaScript New Date from a 12 hour format date and time string来自 12 小时格式日期和时间字符串的 JavaScript 新日期
【发布时间】:2014-06-25 17:38:26
【问题描述】:

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

就目前而言,JavaScript 甚至没有解析时间,因为无论我提供什么时间,结果时间代码都会返回上午 12:00。

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(),但我仍然得到不正确的输出:(

【问题讨论】:

  • new Date() 应该是当前时间,你的时钟好像有问题
  • @Rialgar 对不起,我做了更新澄清。我将示例字符串输入new Date()

标签: javascript string date datetime time


【解决方案1】:

在处理日期时,我总是使用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 试试看。

【讨论】:

  • 这个库有多大?如果可能的话,我希望不必增加太多的脚本开销。
  • 它是 29Kb,10Kb gz。如果您需要做的就是解析日期,那就相当大了。如果你必须做更多,那是值得的。
  • 嗯,还有其他可以大大简化的日期片段。现在,除非有人能提出本机解决方案,否则我将您的答案视为已接受。干杯!
【解决方案2】:

据我所知,JavaScript 中的 Date 构造函数或 Date.parse() 解析的日期字符串的格式无法更改。格式规范可以在RFC822ECMAScript Standards找到,都不支持am/pm。

(链接取自MDN

【讨论】:

    【解决方案3】:

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

     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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2013-04-16
      • 2014-08-10
      • 2017-05-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      相关资源
      最近更新 更多