我从Google日历Feed中获取字符串数据。日期已按参数设置,并带有所需的时区。
2014-05-24T07:00:00.000-04:00
我知道有很棒的图书馆,比如moment.js和date.js,这将有助于格式化我的日期,但它们也可以使用Date对象,它将我的约会投入到客户的文化中。那时我正在玩杂耍。宁愿避免这种情况。
除了大量的条件字符串操作之外,是否有一种简单的方法可以做到这一点,或者我过度简化(再次)?
示例:
2014-05-24T07:00:00.000-04:00 至 2014年5月24日 - 上午7:00
答案 0 :(得分:2)
以下短代码将使用现有值解析您的日期,而不会按时区抵消:
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var res = /(\d+)\-(\d+)\-(\d+)T(\d+)\:(\d+)/
.exec('2014-05-24T07:00:00.000-04:00');
var am = (res[4] < 12);
var date = months[res[2]-1] + ', ' + res[3] + ', ' + res[1];
var time = am ? (parseInt(res[4]) + ':' + res[5] + 'AM') :
(res[4] - 12 + ':' + res[5] + 'PM');
var formatted = date + ' - ' + time;
console.log(formatted);
答案 1 :(得分:1)
您可以将此字符串转换为Date对象,如下所示
new Date("2014-05-24T07:00:00.000-04:00")
然后,您可以使用任何jQuery库轻松将此日期对象转换为所需格式,例如 jquery.globalize.js ......
答案 2 :(得分:1)
你走了:
var d = new Date('2014-05-24T07:00:00.000-04:00');
var calendar = {
months: {
full: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
days: {
full: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
short: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
}
};
console.log(calendar.months.short[d.getMonth()]+', '+d.getDate()+', '+d.getFullYear());
答案 3 :(得分:0)
重新格式化字符串的一个简单函数是:
function reformatDateString(s) {
s = s.match(/\d+/g);
var months = ['January','February','March','April','May','June','July',
'August','September','October','November','December'];
var ampm = s[3]<12? 'AM':'PM';
return months[--s[1]] + ', ' + +s[2] + ', ' + s[0] + ' - ' +
(s[3]%12 || 12) + ':' + s[4] + ' ' + ampm;
}
console.log(reformatDateString('2014-05-24T07:00:00.000-04:00')); // May, 24, 2014 - 7:00 AM
console.log(reformatDateString('2014-05-24T17:00:00.000-04:00')); // May, 24, 2014 - 5:00 PM
console.log(reformatDateString('2014-05-04T00:20:00.000-04:00')); // May, 4, 2014 - 12:20 AM
除了分钟之外,你还假设你不希望在单个数字上加前导零,因为12:5 PM
之类的时间不像12:05 PM
那样可读(对我来说)。
此外,您可能需要修改月份数组,OP中不清楚您是否需要完整的月份名称或缩写(Jan,Feb等)。