2

jsで日時を操作することに関しては、私は特に熟練していません。私は今のようにフォーマットされたいくつかの日時フィールドを持つJSONオブジェクトを持っています。YYYY-MM-DDTHH:MM:SSこれを入れなければなりませんHH:mm AM/PM

var d = Date.parse('2013-04-17T13:05:00');
var date = new Date(d);
var hrs = date.getUTCHours();
var min = date.getUTCMinutes();
var meridian;
if(hrs > 12){
    hrs -= 12;
    meridian = 'PM';
}
else {
    meridian = 'AM';
}
if (min < 10) {
    min = "0"+min;
};
var time = hrs+":"+min+" "+meridian;

これを達成するためのより良い方法はありますか?

4

3 に答える 3

8

moment.js を試してみてください。このライブラリには多くの機能が組み込まれています。

http://momentjs.com/

moment(String, String);
moment("12-25-1995", "MM-DD-YYYY");

「hA」は「3PM」形式の正しい形式です

于 2013-06-18T19:26:18.047 に答える
0

別のアプローチに対する別の答え

今のようにフォーマットされたいくつかの日時フィールドがありますYYYY-MM-DDTHH:MM:SS。これを入れなければなりませんHH:mm AM/PM

format を知っているので、必要な部分を datetime Stringから直接取得して、 Dateインスタンスまたはライブラリを一緒に使用することを回避できます。

var stamp = '2013-04-17T13:05:00',
    hrs = +stamp.slice(11, 13), // 13
    min = +stamp.slice(14, 16); //  5

ここから前と同じように続行します。

于 2013-06-18T22:51:36.247 に答える
-1

これはやり過ぎですが、私は最近、このようなことのためだけに独自の関数を作成するために道を踏み外しました

var easyDate = (function () {
    var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        thstndrd = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'],
        toDate = function () {return new Date(Date.UTC(this.yyyy, this.MM - 1, this.dd, this.hh, this.mm, this.ss, this.ms));},
        toLocaleDate = function () {return new Date(this.yyyy, this.MM - 1, this.dd, this.hh, this.mm, this.ss, this.ms);},
        UTC = function UTC(d) {
            return {
                ms: d.getUTCMilliseconds(),
                ss: d.getUTCSeconds(),
                mm: d.getUTCMinutes(),
                hh: d.getUTCHours(),
                dd: d.getUTCDate(),
                MM: d.getUTCMonth() + 1,
                yyyy: d.getUTCFullYear(),
                dow: d.getUTCDay(),
                toDate: toDate,
                toLocaleDate: toLocaleDate
            }
        },
        easyDate = function easyDate(d) {
            var o = UTC(d);
            return {
                dd: '' + o.dd,
                th: thstndrd[o.dd % 10],
                day: days[o.dow],
                MM: '' + o.MM,
                month: months[o.MM - 1],
                year: '' + o.yyyy,
                am: o.hh < 12 ? 'a.m.' : 'p.m.',
                hh: o.hh < 10 ? '0' + o.hh : '' + o.hh,
                h: '' + (o.hh % 12 || 12),
                mm: o.mm < 10 ? '0' + o.mm : '' + o.mm,
                ss: o.ss < 10 ? '0' + o.ss : '' + o.ss,
                ms: ('00' + o.ms).slice(-3),
                UTC: o
            };
        };
    easyDate.UTC = UTC;
    easyDate.delta = function (then, now) {
        var o, p, dir = -1;
        now || (now = new Date());
        if (now >= then) o = UTC(now), p = UTC(then);
        else o = UTC(then), p = UTC(now), now = then, dir = 1;
        o.dir = dir;
        o.dow = p.dow;
        o.ms = o.ms - p.ms;
        o.ss = o.ss - p.ss;
        o.mm = o.mm - p.mm;
        o.hh = o.hh - p.hh;
        o.dd = o.dd - p.dd;
        o.MM = o.MM - p.MM;
        o.yyyy = o.yyyy - p.yyyy;
        // fix negatives
        if (o.ms < 0) --o.ss, o.ms = (o.ms + 1000) % 1000;
        if (o.ss < 0) --o.mm, o.ss = (o.ss +   60) %   60;
        if (o.mm < 0) --o.hh, o.mm = (o.mm +   60) %   60;
        if (o.hh < 0) --o.dd, o.hh = (o.hh +   24) %   24;
        if (o.dd < 0) { // months have different lengths
            --o.MM;
            now.setUTCMonth(now.getUTCMonth() + 1);
            now.setUTCDate(0);
            o.dd = (o.dd + now.getUTCDate()) % now.getUTCDate();
        }
        if (o.MM < 0)  --o.yyyy, o.MM = (o.MM + 12) % 12;
        return o;
    };
    return easyDate;
}());

そして、それを使用して

var o = easyDate(new Date());
o.month + ' ' + o.dd + o.th + ', ' + o.h + ':' + o.mm + ' ' + o.am;
// "June 18th, 7:30 p.m."

easyDate.deltaコードで呼び出されていることに気付いた場合は、そうです、時間差の計算もサポートしています。getUTC*あなたがすべてのために走りたいだけなら、あなたは持っていeasyDate.UTCます. :)

于 2013-06-18T19:30:44.380 に答える