1

Web サイト ( http://webdesign.onyou.ch/2010/08/04/javascript-time-ago-pretty-date/ ) で、この非常に便利な機能を見つけました。ISO 8601 時刻 (たとえば 2010- 08-26T22:24:17Z) であり、このタイムスタンプからの経過時間を出力します。しかし、UTC ISO 8601 タイムスタンプを使用したいので、アプリを国際的に使用できます。たとえば、ヨーロッパにいる場合、メッセージが数秒前に投稿された場​​合でも、常に「3 時間前」と表示されます。 .

では、入力 UTC タイムスタンプと現在の UTC 時刻から経過した時間を返すにはどうすればよいでしょうか?

    function relativeTime(date_str){
    var time_formats = [
    [60, 'seconds', 1], // 60
    [120, '1 minute ago', '1 minute from now'], // 60*2
    [3600, 'minutes', 60], // 60*60, 60
    [7200, '1 hour ago', '1 hour from now'], // 60*60*2
    [86400, 'hours', 3600], // 60*60*24, 60*60
    [172800, 'yesterday', 'tomorrow'], // 60*60*24*2
    [604800, 'days', 86400], // 60*60*24*7, 60*60*24
    [1209600, 'last week', 'next week'], // 60*60*24*7*4*2
    [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7
    [4838400, 'last month', 'next month'], // 60*60*24*7*4*2
    [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4
    [58060800, 'last year', 'next year'], // 60*60*24*7*4*12*2
    [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12
    [5806080000, 'last century', 'next century'], // 60*60*24*7*4*12*100*2
    [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100
    ];
    var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4);
    var seconds = (new Date - new Date(time)) / 1000;
    var token = 'ago', list_choice = 1;
    if (seconds < 0) {
        seconds = Math.abs(seconds);
        token = 'from now';
        list_choice = 2;
    }
    var i = 0, format;
    while (format = time_formats[i++])
        if (seconds < format[0]) {
            if (typeof format[2] == 'string')
                return format[list_choice];
            else
                return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
        }
    return time;
}
4

2 に答える 2

1
var now = new Date(); 
var utcNow = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());

次にutcNow、現在使用している場所を使用しますnew Date()

于 2012-08-28T08:57:52.930 に答える
1

変化する

var seconds = (new Date - new Date(time)) / 1000;

var seconds = (new Date - new Date(time)) / 1000 + (new Date).getTimezoneOffset()*60;

投稿する前にあなたのコードをテストしていませんでしgetTimezoneOffset

于 2012-08-28T09:02:27.133 に答える