1

私はこの機能を持っています:

function get_time_zone_offset() {   
    var current_date = new Date();   
    return -current_date.getTimezoneOffset() / 60; 
}

クラスが「timeago」タイトル値であるすべてのスパンを、その値と上記の関数が返す数値に変更するjQueryコードが必要です。例えば:

前:

<span class="timeago" title="7/4/2012 9:28:30 AM">7/4/2012 9:28:30 AM</span>

後:

<span class="timeago" title="7/4/2012 12:28:30 PM">7/4/2012 12:28:30 PM</span>
4

3 に答える 3

2

UTCを表すと仮定すると、オブジェクトにすべての計算を実行7/4/2012 9:28:30 AMさせることができます。Date

function formatDate(d) {
    var yy = d.getFullYear();
    var mm = d.getMonth() + 1;
    var dd = d.getDate();
    var hh = d.getHours();
    var ii = d.getMinutes();
    var ss = d.getSeconds();
    var ap;
    if (hh < 12) {
        if (hh === 0) {
            hh = 12;
        }
        ap = "AM";
    }
    else {
        if (hh > 12) {
            hh -= 12;
        }
        ap = "PM";
    }
    return mm + "/" + dd + "/" + yy + " " + hh + ":" + ii + ":" + ss + " " + ap;
}
$("span.timeago").each(function() {
    var dateInput = $(this).text();
    var dateInUTC = new Date(dateInput + " +0000"); // note: +0000 is the key
    var dateOutput = formatDate(dateInUTC);
    $(this).attr("title", dateOutput).text(dateOutput);
});

これは、日付が解析可能であることを前提としています。これがデモです。

于 2012-07-04T10:14:51.300 に答える
0

このような単純なループが機能するようです。

$('span.timeago').each(function(index, elm) {
    var newVal = $(elm).attr('title') * 1 + get_time_zone_offset(); // multiply by 1 to suppress string concatenation
    $(elm).attr('title', newVal);
});
于 2012-07-04T09:11:41.230 に答える
0

.attr [docs]に関数を渡すのはとても簡単です:

var offset = get_time_zone_offset();
$('span.timeago').attr('title', function(i, val) {
    return +val + offset;
});

最初に値を適切なタイムスタンプに変換する必要がある場合は、How to convert from date to unix_timestamp using javascript をご覧ください

Timeagoプラグインを使用している場合は、次の点に注意してください。

タイムゾーンのサポートが気になりますか? しないでください。Timeago もこれを処理します。タイムスタンプがISO 8601形式であり、完全なタイム ゾーン指定子(±hhmm) が含まれている限り、訪問者が住んでいるタイム ゾーンに関係なく、すべてがすぐに機能するはずです。

したがって、この変換を手動で行う必要さえない場合があります。適切なタイムゾーン情報を値に追加するだけです。

于 2012-07-04T09:11:18.827 に答える