我正在尝试重新格式化从API获取的日期。在对象中,我有:
created_at: "2013-06-13T16:29:55.245Z"
我想将日期显示为6/13/2013。有人建议我使用moment.js。它有很多文档,但我有点困惑如何使用它。请问是否有人可以帮忙或提出更简单的方法来完成这个任务?
我正在尝试重新格式化从API获取的日期。在对象中,我有:
created_at: "2013-06-13T16:29:55.245Z"
我想将日期显示为6/13/2013。有人建议我使用moment.js。它有很多文档,但我有点困惑如何使用它。请问是否有人可以帮忙或提出更简单的方法来完成这个任务?
alert(moment("2013-06-13T16:29:55.245Z").format("M/DD/YYYY"));
var timeStr = "2013-06-13T16:29:55.245Z",
newFormat = moment(timeStr).format('M/DD/YYYY');
document.body.textContent = newFormat;
<script src="https://rawgithub.com/timrwood/moment/2.9.0/min/moment.min.js"></script>
输出
6/13/2013
如果没有时间戳,并且使用纯字符串操作而不是 new
Date
对象,您可以这样做:
var timeStr = "2013-06-13T16:29:55.245Z",
temp = timeStr.split("T")[0].split("-").reverse(),
newFormat;
temp[0] = temp.splice(1, 1, temp[0])[0];
newFormat = temp.join("/");
if (newFormat.charAt(0) === "0") {
newFormat = newFormat.slice(1);
}
document.body.textContent = newFormat;
输出
6/13/2013
通过使用 答案已删除Date
对象,参见@Antony的答案。
或者,如果您需要更加跨浏览器兼容的Date
对象,但仍然需要进行字符串解析。
var timeStr = "2013-06-13T16:29:55.245Z",
intermediate = timeStr.split("T"),
newStr = intermediate[0].split("-").join("/") + " " + intermediate[1].split(".")[0] + " GMT",
newDate = new Date(newStr),
newFormat = (1 + newDate.getUTCMonth()) + "/" + newDate.getUTCDate() + "/" + newDate.getFullYear();
document.body.textContent = newFormat;
输出
6/13/2013
最后,您可以将字符串拆分成组件部分,并将其使用这些参数提供给Date.UTC
而不是让Date
进行字符串解析。
Date.UTC(year, month, day [, hour, minute, second, millisecond]);
因此,也许您现在可以看到为什么人们建议使用 moments.js ,但只要您有知识,那么没必要使用库来完成此操作也不会太麻烦。
Date.UTC()
会给你从1970年1月1日午夜开始的毫秒数,以UTC时间计算,但你仍然需要使用new Date()
,比如new Date(Date.UTC(96, 11, 1, 0, 0, 0));
,才能得到适合你所在地区的日期/时间。而使用这些数字将会给我11月30日晚上7点,而不是12月1日凌晨。 - vapcguyvar dateString = 0000-01-01T00:00:00.0Z
,而是必须写成var dateString = 0000-01-01T05:00:00.0Z
。我的字符串看起来像这样:this.MyDate = ko.observable(new Date(moment(dateString).format('MM/DD/YYYY')))
。(当然,后来我发现最早支持的Kendo datepicker日期是1900年1月1日...但这是另外一个故事了。) - vapcguyvar tuple = createdAt.split("T");
var date = tuple[0];
var dateTuple = date.split("-");
var day = parseInt(dateTuple[2]);
var month = parseInt(dateTuple[1]);
var year = parseInt(dateTuple[0]);
var newFormatedDate = [ month , day, year ].join("/");
06/13/2013
,但是OP想要的是6/13/2013
:http://jsfiddle.net/Xotic750/mRPcP/ - Xotic750{
"given": "2013-06-13T16:29:55.245Z",
"time": {
"daysInMonth": 30,
"millisecond": 245,
"second": 55,
"minute": 29,
"hour": 16,
"date": 13,
"day": 4,
"week": 24,
"month": 5,
"year": 2013,
"zone": "+0000"
},
"formatted": {
"weekday": "Thursday",
"month": "June",
"ago": "2 hours",
"calendar": "Today at 4:29 PM",
"generic": "2013-06-13T16:29:55+00:00",
"time": "4:29 PM",
"short": "06/13/2013",
"slim": "6/13/2013",
"hand": "Jun 13 2013",
"handTime": "Jun 13 2013 4:29 PM",
"longhand": "June 13 2013",
"longhandTime": "June 13 2013 4:29 PM",
"full": "Thursday, June 13 2013 4:29 PM",
"fullSlim": "Thu, Jun 13 2013 4:29 PM"
},
"array": [
2013,
5,
13,
16,
29,
55,
245
],
"offset": 1371140995245,
"unix": 1371140995,
"utc": "2013-06-13T16:29:55.245Z",
"valid": true,
"integer": false,
"zone": 0
}