使用javascript格式化DATE(可能正则表达式)

时间:2017-01-08 16:38:44

标签: javascript jquery regex date

我使用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');

但它不起作用。 :(

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

你的正则表达式不是很正确,\d{8}将匹配8个连续数字,但那里也有冒号,你需要这样的东西:

&#13;
&#13;
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;
&#13;
&#13;

用名称替换月份号码只需要多做一点工作:

&#13;
&#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;
&#13;
&#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'));