简体   繁体   English

Timeago jQuery插件时区

[英]Timeago jquery Plugin Timezone

I am developing an asp.net application in which I am using timeago plugin of jQuery and I am facing the fact that I am getting the time in UTC whenever my local time is GMT + 5.00 and on the server side I am getting the UTC time. 我正在开发一个asp.net应用程序,其中使用的是jQuery的timeago插件,并且我面临这样一个事实,只要我的本地时间是GMT + 5.00,我就会在UTC中获取时间,而在服务器端,我正在获取UTC时间。 。

So now the question is this how to convert UTC to GMT+5.00, If I am getting the time right now then It is giving me the output 5 hours ago which shows that the output is in GMT. 所以现在的问题是,如何将UTC转换为GMT + 5.00,如果我现在有时间,那么它将在5个小时前给我输出,表明输出是GMT。

I know this question is repeating but I am unable to understand the previously discussed question. 我知道这个问题在重复,但是我无法理解前面讨论的问题。

The code of the plugin is given below: 该插件的代码如下:

(function ($) {
    $.timeago = function (timestamp) {
        if (timestamp instanceof Date) {
            return inWords(timestamp);
        } else if (typeof timestamp === "string") {
            return inWords($.timeago.parse(timestamp));
        } else if (typeof timestamp === "number") {
            return inWords(new Date(timestamp));
        } else {
            return inWords($.timeago.datetime(timestamp));
        }
    };
    var $t = $.timeago;

    $.extend($.timeago, {
        settings: {
            refreshMillis: 60000,
            allowFuture: false,
            strings: {
                prefixAgo: null,
                prefixFromNow: null,
                suffixAgo: "ago",
                suffixFromNow: "from now",
                seconds: "less than a minute",
                //minute: "about a minute",
                minute: "a minute",
                minutes: "%d minutes",
                //hour: "about an hour",
                hour: "an hour",
                //hours: "about %d hours",
                hours: "%d hours",
                day: "a day",
                days: "%d days",
                //month: "about a month",
                month: "a month",
                months: "%d months",
                //year: "about a year",
                year: "a year",
                years: "%d years",
                wordSeparator: " ",
                numbers: []
            }
        },
        inWords: function (distanceMillis) {
            var $l = this.settings.strings;
            var prefix = $l.prefixAgo;
            var suffix = $l.suffixAgo;
            if (this.settings.allowFuture) {
                if (distanceMillis < 0) {
                    prefix = $l.prefixFromNow;
                    suffix = $l.suffixFromNow;
                }
            }

            var seconds = Math.abs(distanceMillis) / 1000;
            var minutes = seconds / 60;
            var hours = minutes / 60;
            var days = hours / 24;
            var years = days / 365;

            function substitute(stringOrFunction, number) {
                var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
                var value = ($l.numbers && $l.numbers[number]) || number;
                return string.replace(/%d/i, value);
            }

            var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
        seconds < 90 && substitute($l.minute, 1) ||
        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
        minutes < 90 && substitute($l.hour, 1) ||
        hours < 24 && substitute($l.hours, Math.round(hours)) ||
        hours < 42 && substitute($l.day, 1) ||
        days < 30 && substitute($l.days, Math.round(days)) ||
        days < 45 && substitute($l.month, 1) ||
        days < 365 && substitute($l.months, Math.round(days / 30)) ||
        years < 1.5 && substitute($l.year, 1) ||
        substitute($l.years, Math.round(years));

            var separator = $l.wordSeparator === undefined ? " " : $l.wordSeparator;
            return $.trim([prefix, words, suffix].join(separator));
        },
        parse: function (iso8601) {
            var s = $.trim(iso8601);
            s = s.replace(/\.\d+/, ""); // remove milliseconds
            s = s.replace(/-/, "/").replace(/-/, "/");
            s = s.replace(/T/, " ").replace(/Z/, " UTC");
            s = s.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400
            return new Date(s);
        },
        datetime: function (elem) {
            var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
            return $t.parse(iso8601);
        },
        isTime: function (elem) {
            // jQuery's `is()` doesn't play well with HTML5 in IE
            return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
        }
    });

    $.fn.timeago = function () {
        var self = this;
        self.each(refresh);

        var $s = $t.settings;
        if ($s.refreshMillis > 0) {
            setInterval(function () { self.each(refresh); }, $s.refreshMillis);
        }
        return self;
    };

    function refresh() {
        var data = prepareData(this);
        if (!isNaN(data.datetime)) {
            $(this).text(inWords(data.datetime));
        }
        return this;
    }

    function prepareData(element) {
        element = $(element);
        if (!element.data("timeago")) {
            element.data("timeago", { datetime: $t.datetime(element) });
            var text = $.trim(element.text());
            if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
                element.attr("title", text);
            }
        }
        return element.data("timeago");
    }

    function inWords(date) {
        return $t.inWords(distance(date));
    }

    function distance(date) {
        return (new Date().getTime() - date.getTime());
    }

    // fix for IE6 suckage
    document.createElement("abbr");
    document.createElement("time");
 (jQuery));
}

Thanks in advance. 提前致谢。

Try using Livestamp.js with something like this: 尝试将Livestamp.js与以下内容一起使用:

date is the DateTime object you are trying to output. date是您要输出的DateTime对象。

<span data-livestamp="<%= (date - new DateTime(1970,1,1,0,0,0)).TotalSeconds) %>">
</span>

You are outputting the Unix timestamp, which is always in UTC, so it doesn't matter what timezone the user's computer is in. It will always print out the correct "timeago" text. 您正在输出始终为UTC的Unix时间戳,因此用户计算机所在的时区无关紧要。它将始终打印出正确的“ timeago”文本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM