如何在不更改文化的情况下格式化日期字符串?

时间:2014-04-01 20:20:13

标签: javascript

我从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

4 个答案:

答案 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等)。