3

请指教:

有没有没有正则表达式或字符串替换等的方法来转换简单的日期,例如:

Fri Jun 21 00:00:00 UTC+0100 2013

到 ISO8601格式的日期 yy-mm-dd

PS:8601只有日期,不是日期时间。

4

4 回答 4

5

使用 moment.js http://momentjs.com/

moment(new Date(), "YYYY-MM-DD HH:mm Z");

或者:

var date = moment("Fri Jun 21 00:00:00 UTC+0100 2013");
moment("Fri Jun 21 00:00:00 UTC+0100 2013", "YYYY-MM-DD HH:mm Z");

您可以以任何您想要的方式对其进行解析和格式化http://momentjs.com/docs/它也与 ISO-8601 日期兼容以进行解析。

于 2013-06-04T13:29:18.623 回答
4

是的 !

javascript中的日期函数。

var d = new Date("Fri Jun 21 00:00:00 UTC+0100 2013")
alert( d.getFullYear() + '-' + d.getUTCMonth() + '-' + d.getUTCDay())

2行代码:)

更多信息在这里:http ://www.w3schools.com/jsref/jsref_obj_date.asp

于 2013-11-23T15:36:10.347 回答
3

没有正则表达式或字符串替换?是的,假设格式是固定的,您可以使用.slice()和/或.substr()提取您需要的特定位并重新排列它们(除非此类方法属于您的“等等”类别):

var input = "Fri Jun 21 00:00:00 UTC+0100 2013";

var year = input.slice(-4),
    month = ['Jan','Feb','Mar','Apr','May','Jun',
             'Jul','Aug','Sep','Oct','Nov','Dec'].indexOf(input.substr(4,3))+1,
    day = input.substr(8,2);

var output = year + '-' + (month<10?'0':'') + month + '-' + day;

或者您可以继续使用正则表达式替换变得愚蠢:

var output = input.replace(/^[^\s]+\s([^\s]+)\s(\d+)\s.*(\d{4})$/,function(m,p1,p2,p3) {
   var month = ['Jan','Feb','Mar','Apr','May','Jun',
                'Jul','Aug','Sep','Oct','Nov','Dec'].indexOf(p1)+1;
   return p3 + '-' + (month<10?'0':'') + month + '-' + (p2.length===1?'0':'') + p2;
});

当然,您可能希望将此类代码包装在一个reformatDate()方法中。

(对于日期字符串的“简单”重新格式化,对象Date及其方法并不是特别有用,除非起始格式是Date.parse().)

于 2013-06-04T13:51:47.647 回答
0

为什么不尝试使用get函数,如getDate(),getMonth()等。例如:

var today = new Date();
var d1 = new Date();
alert(d1);
var date = d1.getDate();
var month = d1.getMonth() + 1;
var year = d1.getFullYear();

然后按照您希望的方式配置字符串...!

于 2013-06-04T13:30:26.457 回答