Javascript - 将日期字符串转换为美国日期格式

时间:2017-04-16 17:04:18

标签: javascript date datetime

我有一个名为regdate的字符串,值为16-4-2017 00:00:00

现在我已经尝试了几个小时将此字符串转换为这种格式:4/16/2017 12:00:00 AM

我知道这个问题可能会重复,但我已经在互联网上看了几个小时了。

5 个答案:

答案 0 :(得分:1)

方法1 - 使用正则表达式解析,使用toLocaleString格式化输出

在此代码段中,string.match方法用于解析日期字符串。然后使用日期部分创建日期对象,toLocaleString("en-US")用于获取美国日期格式:

function convertDate(regdate) {
  var m = regdate.match(/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/);
  var date = new Date(m[3], m[2] - 1, m[1], m[4], m[5], m[6]);
  return date.toLocaleString("en-US");
}
Date: <input id="txtDate" type="text" value="16-4-2017 00:00:00" />
<button onclick="console.log(convertDate(document.getElementById('txtDate').value))">Convert</button>

方法2 - 解析并替换为正则表达式

在第二个代码片段中,string.replace方法用于修改日期字符串:正则表达式解析原始日期字符串,替换函数重新组合各个部分:

function convertDate(regdate) {
  return regdate.replace(/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,
    function(m, v1, v2, v3, v4, v5, v6) {
      var hour24 = parseInt(v4, 10);
      var hour12 = hour24 % 12 || 12;
      var ampm = hour24 < 12 ? "AM" : "PM";
      return `${v2}/${v1}/${v3} ${hour12}:${v5}:${v6} ${ampm}`;
    });
}
Date: <input id="txtDate" type="text" value="16-4-2017 00:00:00" />
<button onclick="console.log(convertDate(document.getElementById('txtDate').value))">Convert</button>

方法3 - 使用datejs库解析,使用toLocaleString格式化输出

如果您不介意使用外部库,可以将字符串转换为datejs的日期,并使用date.toLocaleString("en-US")格式化输出:

var date = Date.parse("16-4-2017 00:00:00");
console.log(date.toLocaleString("en-US"));
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

答案 1 :(得分:1)

现在结束!!

&#13;
&#13;
var time = "16-4-2017 13:00:00";
var date = time.split(' ')[0].split('-'); //now date is ['16', '4', '2017'];
time = time.split(' ')[1].split(':'); //now time is ['13', 00', 00']
var dateFull = new Date(date[2], date[1], date[0], time[0], time[1], time[2]);
var dateString = (dateFull.getMonth()) + dateFull.toString().substring(0, dateFull.toString().indexOf('G')).substring(7).replace(' ', '/').replace(' ', '/');
if (dateFull.getHours() > 12) dateString = dateString.replace(dateFull.getHours(), dateFull.getHours() - 12) + 'PM';
else if (dateFull.getHours() == 12) dateString += 'PM';
else dateString += 'AM';
console.log(dateString);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

&#13;
&#13;
var q = new Date(Date.parse('2017-4-16 00:00:00'));
console.log(q.toLocaleDateString()+q.toLocaleTimeString());
&#13;
&#13;
&#13;

这应该有所帮助。但请检查日期的输入格式。您发布的格式始终会为您提供NaN

答案 3 :(得分:0)

只是另一个例子,但更简洁一点:

var str1 = ["hi","yoyo","damn"]
var str2 = ["yoyo","wow","daui"]
var str3 = ["damn","right","yoyo"]

但是,使用仅数字格式化美国格式的字符串非常不明确。最好使用明确的格式,例如使用月份名称而不是数字,例如2017年4月16日上午12:00:00

答案 4 :(得分:0)

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="123" roles="tomcat"/>
  <user username="both" password="123" roles="tomcat,role1"/>
  <user username="role1" password="123" roles="role1"/>
  <user username="souvik" password="xyz123" roles="manager-gui,manager-script,manager-jmx,manager-status" />
</tomcat-users>