经典ASP的相对日期/时间

时间:2022-05-14 04:26:08

Does anyone have a relative date/time from now to a natural/human for classic ASP function in VBScript? This is like Twitter.

在VBScript中,有没有人从现在到相对日期/时间为经典ASP函数?这就像Twitter。

Examples:

  • Less than 1 minute ago
  • 不到1分钟前

  • About 5 minutes ago
  • 大约5分钟前

  • About an hour ago
  • 大约一小时前

  • About 3 hours ago
  • 大约3小时前

  • Yesterday
  • Wednesday
  • etc.

4 个解决方案

#1


This is the one I use. Pretty certain I just ripped it from Jeff's example that he used for this site.

这是我使用的那个。很确定我刚从杰夫的例子中删除了他用于这个网站的例子。

Yes, yes I did: How can I calculate relative time in C#?

是的,我做了:如何计算C#中的相对时间?

Function RelativeTime(dt)
    Dim t_SECOND : t_SECOND = 1
    Dim t_MINUTE : t_MINUTE = 60 * t_SECOND
    Dim t_HOUR : t_HOUR = 60 * t_MINUTE
    Dim t_DAY : t_DAY = 24 * t_HOUR
    Dim t_MONTH : t_MONTH = 30 * t_DAY

    Dim delta : delta = DateDiff("s", dt, Now)

    Dim strTime : strTime = ""
    If (delta < 1 * t_MINUTE) Then
        If delta = 0 Then
            strTime = "just now"
        ElseIf delta = 1 Then
            strTime = "one second ago"
        Else
            strTime = delta & " seconds ago"
        End If
    ElseIf (delta < 2 * t_MINUTE) Then
      strTime = "a minute ago"
    ElseIf (delta < 50 * t_MINUTE) Then
      strTime = Max(Round(delta / t_MINUTE), 2) & " minutes ago"
    ElseIf (delta < 90 * t_MINUTE) Then
      strTime = "an hour ago"
    ElseIf (delta < 24 * t_HOUR) Then
      strTime = Round(delta / t_HOUR) & " hours ago"
    ElseIf (delta < 48 * t_HOUR) Then
      strTime = "yesterday"
    ElseIf (delta < 30 * t_DAY) Then
     strTime = Round(delta / t_DAY) & " days ago"
    ElseIf (delta < 12 * t_MONTH) Then
        Dim months
        months = Round(delta / t_MONTH)
        If months <= 1 Then
            strTime = "one month ago"
        Else
            strTime = months & " months ago"
        End If
    Else
        Dim years : years = Round((delta / t_DAY) / 365)
        If years <= 1 Then
            strTime = "one year ago"
        Else
            strTime = years & " years ago"
        End If
    End If
    RelativeTime = strTime
End Function

#2


taken from ajaxed

取自ajaxed

'here comes some global helpers...
public function sayDate(dat, mode, relativNotation)
    if not isDate(dat) then
        sayDate = "unknown"
        exit function
    end if
    if relativNotation then
        diff = dateDiff("s", dat, now())
        if diff <= 10 and diff >= 0 then
            sayDate = "Just now" : exit function
        elseif diff < 60 and diff >= 0 then
            sayDate = diff & " seconds ago" : exit function
        elseif diff = 60 and diff >= 0 then
            sayDate = diff & " minute ago" : exit function
        elseif diff <= 1800 and diff >= 0 then
            sayDate = int(diff / 60) & " minutes ago" : exit function
        elseif diff < 86400 and diff >= 0 then
            sayDate = plural(int(diff / 60 / 60), "hour", empty) & " ago"
        else
            if datevalue(dat) = date() then
                sayDate = "Today"
            elseif dateValue(dat) = dateAdd("d", 1, date()) then
                sayDate = "Tomorrow"
            elseif dateValue(dat) = dateAdd("d", -1, date()) then
                sayDate = "Yesterday"
            end if
        end if
    end if
    if relativNotation and lCase(mode) = "datetime" and isEmpty(sayDate) then
        diff = dateDiff("d", dat, now())
        sayDate = plural(diff, "day", empty) & " ago"
        exit function
    end if

    if isEmpty(sayDate) then
        sayDate = day(dat) & ". " & monthname(month(dat), true)
        if year(dat) <> year(now()) then sayDate = sayDate & " " & year(dat)
    end if

    if lCase(mode) <> "datetime" then exit function
    if uBound(split(dat, " ")) <= 0 then exit function
    'sayDate = sayDate & ", " & str.padLeft(hour(dat), 2, "0") & ":" & str.padLeft(minute(dat), 2, "0")
end function

public function plural(val, singularform, pluralform)
    plural = singularform
    if val <> 1 then plural = pluralform
    if isEmpty(plural) then plural = singularform & "s"
    plural = val & " " & plural
end function

#3


I write my own function like this, could be found at http://asp.web.id/asp-classic-relative-date-function.html

我写这样的函数,可以在http://asp.web.id/asp-classic-relative-date-function.html找到

it is used conversion asp date to unixtimestamp format and calculate the time margin. it is customizable you could also create relative date for upcoming date using this function.

它使用转换asp日期到unixtimestamp格式并计算时间余量。它是可自定义的,您还可以使用此功能为即将到来的日期创建相对日期。

#4



DateAdd("n", -1, Now)
DateAdd("n", -5, Now)
DateAdd("h", -1, Now)
DateAdd("h", -3, Now)
DateAdd("d", -1, Date)
DateAdd("d", -1, Date)

Not sure about what you mean by Wednesday part.
Can you elaborate?

不确定星期三部分是什么意思。你能详细说说吗?

#1


This is the one I use. Pretty certain I just ripped it from Jeff's example that he used for this site.

这是我使用的那个。很确定我刚从杰夫的例子中删除了他用于这个网站的例子。

Yes, yes I did: How can I calculate relative time in C#?

是的,我做了:如何计算C#中的相对时间?

Function RelativeTime(dt)
    Dim t_SECOND : t_SECOND = 1
    Dim t_MINUTE : t_MINUTE = 60 * t_SECOND
    Dim t_HOUR : t_HOUR = 60 * t_MINUTE
    Dim t_DAY : t_DAY = 24 * t_HOUR
    Dim t_MONTH : t_MONTH = 30 * t_DAY

    Dim delta : delta = DateDiff("s", dt, Now)

    Dim strTime : strTime = ""
    If (delta < 1 * t_MINUTE) Then
        If delta = 0 Then
            strTime = "just now"
        ElseIf delta = 1 Then
            strTime = "one second ago"
        Else
            strTime = delta & " seconds ago"
        End If
    ElseIf (delta < 2 * t_MINUTE) Then
      strTime = "a minute ago"
    ElseIf (delta < 50 * t_MINUTE) Then
      strTime = Max(Round(delta / t_MINUTE), 2) & " minutes ago"
    ElseIf (delta < 90 * t_MINUTE) Then
      strTime = "an hour ago"
    ElseIf (delta < 24 * t_HOUR) Then
      strTime = Round(delta / t_HOUR) & " hours ago"
    ElseIf (delta < 48 * t_HOUR) Then
      strTime = "yesterday"
    ElseIf (delta < 30 * t_DAY) Then
     strTime = Round(delta / t_DAY) & " days ago"
    ElseIf (delta < 12 * t_MONTH) Then
        Dim months
        months = Round(delta / t_MONTH)
        If months <= 1 Then
            strTime = "one month ago"
        Else
            strTime = months & " months ago"
        End If
    Else
        Dim years : years = Round((delta / t_DAY) / 365)
        If years <= 1 Then
            strTime = "one year ago"
        Else
            strTime = years & " years ago"
        End If
    End If
    RelativeTime = strTime
End Function

#2


taken from ajaxed

取自ajaxed

'here comes some global helpers...
public function sayDate(dat, mode, relativNotation)
    if not isDate(dat) then
        sayDate = "unknown"
        exit function
    end if
    if relativNotation then
        diff = dateDiff("s", dat, now())
        if diff <= 10 and diff >= 0 then
            sayDate = "Just now" : exit function
        elseif diff < 60 and diff >= 0 then
            sayDate = diff & " seconds ago" : exit function
        elseif diff = 60 and diff >= 0 then
            sayDate = diff & " minute ago" : exit function
        elseif diff <= 1800 and diff >= 0 then
            sayDate = int(diff / 60) & " minutes ago" : exit function
        elseif diff < 86400 and diff >= 0 then
            sayDate = plural(int(diff / 60 / 60), "hour", empty) & " ago"
        else
            if datevalue(dat) = date() then
                sayDate = "Today"
            elseif dateValue(dat) = dateAdd("d", 1, date()) then
                sayDate = "Tomorrow"
            elseif dateValue(dat) = dateAdd("d", -1, date()) then
                sayDate = "Yesterday"
            end if
        end if
    end if
    if relativNotation and lCase(mode) = "datetime" and isEmpty(sayDate) then
        diff = dateDiff("d", dat, now())
        sayDate = plural(diff, "day", empty) & " ago"
        exit function
    end if

    if isEmpty(sayDate) then
        sayDate = day(dat) & ". " & monthname(month(dat), true)
        if year(dat) <> year(now()) then sayDate = sayDate & " " & year(dat)
    end if

    if lCase(mode) <> "datetime" then exit function
    if uBound(split(dat, " ")) <= 0 then exit function
    'sayDate = sayDate & ", " & str.padLeft(hour(dat), 2, "0") & ":" & str.padLeft(minute(dat), 2, "0")
end function

public function plural(val, singularform, pluralform)
    plural = singularform
    if val <> 1 then plural = pluralform
    if isEmpty(plural) then plural = singularform & "s"
    plural = val & " " & plural
end function

#3


I write my own function like this, could be found at http://asp.web.id/asp-classic-relative-date-function.html

我写这样的函数,可以在http://asp.web.id/asp-classic-relative-date-function.html找到

it is used conversion asp date to unixtimestamp format and calculate the time margin. it is customizable you could also create relative date for upcoming date using this function.

它使用转换asp日期到unixtimestamp格式并计算时间余量。它是可自定义的,您还可以使用此功能为即将到来的日期创建相对日期。

#4



DateAdd("n", -1, Now)
DateAdd("n", -5, Now)
DateAdd("h", -1, Now)
DateAdd("h", -3, Now)
DateAdd("d", -1, Date)
DateAdd("d", -1, Date)

Not sure about what you mean by Wednesday part.
Can you elaborate?

不确定星期三部分是什么意思。你能详细说说吗?