我使用JavaScript和JQuery,我有一个这样的字符串(不可更改的xml响应):
var str = "2017-01-08T16:06:52+00:00";
如何转换为这样的日期:
08 january 2017, 16:06:52
或者至少:
08 01 2017, 16:06:52
我试图使用.replace()
之类的:
str = str.replace(/(\d{4})-(\d{2})-(\d{2})T(\d{8}).*/,'$2 $3 $1, $4');
但它不起作用。 :(
答案 0 :(得分:6)
要执行此操作,您可以从字符串创建Date()
对象,然后将Date()
对象公开的方法中的字符串连接在一起。试试这个:
var str = "2017-01-08T16:06:52+00:00";
var date = new Date(str);
var months = [ "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december" ];
var dateString = ("00" + date.getDate()).slice(-2) + ' ' + months[date.getMonth()] + ' ' + date.getFullYear() + ', ' + ("00" + date.getHours()).slice(-2) + ':' + ("00" + date.getMinutes()).slice(-2) + ':' + ("00" + date.getSeconds()).slice(-2);
console.log(dateString);
请注意,使用日期格式库(例如MomentJS或DateJS)可以使这更简单,但是包含整个库以格式化单个日期相当浪费。如果您需要在整个网站中反复执行此操作,那么它们可能是值得的。
另请注意,在英语国家,月份名称应大写,因此请考虑修改该案例的格式。
答案 1 :(得分:0)
或者,如果添加库是一个选项,您可以使用moment.js。您可以call .format
并传递输出的结果,例如:
var str = "2017-01-08T16:06:52+00:00";
var momentDate = moment(str);
console.log(momentDate.format('DD MMMM YYYY HH:mm:ss'));

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>
&#13;
答案 2 :(得分:0)
你的正则表达式不是很正确,\d{8}
将匹配8个连续数字,但那里也有冒号,你需要这样的东西:
var str = "2017-01-08T16:06:52+00:00"
str = str.replace(/(\d{4})-(\d{2})-(\d{2})T(.{8}).*/, '$2 $3 $1, $4');
console.log(str)
&#13;
用名称替换月份号码只需要多做一点工作:
function reformatDate(s) {
var months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
var b = s.split(/\D/);
return b[2] + ' ' + months[b[1]-1] + ', ' + b[0] + ' ' + b[3] + ':' + b[4] + ':' + b[5];
}
var s = "2017-01-08T16:06:52+00:00"
console.log(reformatDate(s));
&#13;
小心使用Date构造函数(和Date.parse)来解析字符串,它主要依赖于实现。
如果要在客户端的时区中显示日期和时间,请将字符串解析为Date,然后将其作为字符串返回。像fecha.js这样的库对此有好处。它很小,只是解析和格式化,例如
var s = '2017-01-08T16:06:52+00:00'
var d = fecha.parse(s,'YYYY-MM-DDTHH:mm:ssZZ');
console.log(fecha.format(d,'dd MMMM, YYYY HH:mm:ss'));