在Classic ASP中将日期转换为GMT

时间:2016-01-12 10:55:21

标签: javascript date asp-classic

我想将以下日期转换为GMT日期。请任何人都可以告诉我该怎么做。任何帮助将受到高度赞赏。

更新

嘿,我发现了这个

   <% response.write currentUTC() %>

   <script language=jscript runat=server>
        function currentUTC(){
        var d, s;
       d = new Date();
       s = "Server current UTC time is: ";
       s += d.toUTCString('!%a, %d %b %Y %H:%M:%S GMT');
       return(s);
      }
 </script>

输出:服务器当前UTC时间是:星期五,2016年1月15日07:42:13 UTC

但我需要这种格式: YYYYMMDDHHMMSS

请有人吗?

更新

我尝试使用以下功能:

GetServerGMT=Year(Now())&Month(Now())&Day(Now())&Hour(Now())&Minute(Now())&Second(Now())&WeekDay(Now()) 

输出:20161172035121

但这不是有效的时间戳。

2 个答案:

答案 0 :(得分:0)

这取决于Date()包含的内容。首先,您需要知道服务器最初的时区,因为Classic ASP从运行它的Web服务器的区域系统设置中获取日期。

完成此操作后,只需使用DateAdd()来抵消当前时区的+-小时数。

<%
Dim offset
'i.e PST to GMT
offset = -8
Response.Write DateAdd("h", Date(), offset)
%>

这仍然只是原始日期,并将以默认格式(基于服务器的区域系统设置)输出为字符串。

有关格式化日期的帮助,请参阅Format current date and time

根据此comment,您可以通过重新排列日期组件,使用链接答案中的示例来格式化此YYYYMMDDHHMMSS;

Dim dt
dt = yy & mm & dd & hh & nn & ss
Response.Write dt

使用Now()计算日期组件的值,但您可以将其替换为

dtsnow = DateAdd("h", Date(), offset)

在这里我更好的判断是如何使用链接答案中的示例来做到这一点,我只是想让你自己尝试。

Dim dd, mm, yy, hh, nn, ss
Dim datevalue, timevalue, dtsnow, dtsvalue

'UTC and GMT are the same no need for offset.
'Store DateTimeStamp once.
dtsnow = Now() 'Use Now() otherwise we don't have the Time.

'Individual date components
dd = Right("00" & Day(dtsnow), 2)
mm = Right("00" & Month(dtsnow), 2)
yy = Year(dtsnow)
hh = Right("00" & Hour(dtsnow), 2)
nn = Right("00" & Minute(dtsnow), 2)
ss = Right("00" & Second(dtsnow), 2)

'Build the date string in the format yyyymmdd
datevalue = yy & mm & dd
'Build the time string in the format hhmmss
timevalue = hh & nn & ss
'Concatenate both together to build the timestamp yyyymmddhhmmss
dtsvalue = datevalue & timevalue

'Output to screen
Call Response.Write(dtsvalue)

答案 1 :(得分:0)

添加到Lankymart链接的内容。 ASP Classic有很多时间/日期选项,根据我的经验,你似乎必须为每种不同类型创建一个函数或子函数。

My HTTP Only cookie GMT与我的GMT RSS Feed布局不同。

示例1:strGMTDateRFC22 = CookieServerUTC(“d”,1,5,“GMT”)

'# following formating RFC22 for your GMT Cookie time. 
    strGMTDateRFC22 = CookieServerUTC("d","&strCookieExpires&",5,"GMT")  ' 1 Day set in char enc dec page
    Response.AddHeader "Set-Cookie", strCookieName & "=" & strCookieKey & "=" & strCookieValue & "; expires=" & strGMTDateRFC22 & "; domain="& strCookieDomain &"; path=/; HTTPOnly"

两个功能中的第一个

    Function CookieServerUTC(strD,strT,strOSet,strZ)
Dim strTG,strCookieD
'snipped unwanted code
        strTG = DateAdd("h", strOSet,Now())
        strCookieD = DateAdd(strD,strT,CDate(strTG))
     CookieServerUTC =  fncFmtDate(strCookieD, "%a, %d %b %Y %H:%N:%S "&strZ&"")

    End Function

需要设置服务器UTC时的另一个示例 这允许strH =“h”strT =“5”(strT时间偏移+/-)和strZ GMT(时区)

Function GetServerUTC(strH,strT,strZ)

 GetServerUTC = fncFmtDate(DateAdd(strH,strT,Now()), "%a, %d %b %Y %H:%N:%S "&strZ&"")

End Function

然后是在2001年ASP Classic仍处于HOT状态时发布的功能脚本。 4guysfromrolla.com发布了它,我可以想象它已经帮助了很多时间日期格式爱好者。

这是链接和打击,即2001年的代码从互联网上删除的代码。 Customizable Date Formatting Routine by Ken Schaefer

    Function fncFmtDate( _
        byVal strDate, _
        byRef strFormat _
       )
     ' Accepts strDate as a valid date/time,
     ' strFormat as the output template.
     ' The function finds each item in the
     ' template and replaces it with the
     ' relevant information extracted from strDate

     ' Template items (example)
     ' %m Month as a decimal (02)
     ' %B Full month name (February)
     ' %b Abbreviated month name (Feb )
     ' %d Day of the month (23)
     ' %O Ordinal of day of month (eg st or rd or nd)
     ' %j Day of the year (54)
     ' %Y Year with century (1998)
     ' %y Year without century (98)
     ' %w Weekday as integer (0 is Sunday)
     ' %a Abbreviated day name (Fri)
     ' %A Weekday Name (Friday)
     ' %H Hour in 24 hour format (24)
     ' %h Hour in 12 hour format (12)
     ' %N Minute as an integer (01)
     ' %n Minute as optional if minute <> 0
     ' %S Second as an integer (55)
     ' %P AM/PM Indicator (PM)
'#### READ THE FORMATTING GUIDE ABOVE #####

'Snipped the code due to the 1% possibility you didn't format your date / time correctly and the code tosses an error based on that formatting.

    End Function ' fncFmtDate

如您所见,我们有许多可能的解决方案。 找到适合您的项目并在其上构建的日期时间格式解决方案。

Ken的代码确实需要特定的输入日期格式。 对于那些没有真正调试或创建自己的代码的人,你可以使用我在上面Ken的例子中构建的内容。

这只需要ASP Classic中的任何格式,并且它具有魔力。 请注意,代码的第一部分更正了单个数字问题。 如果你曾经使用货币格式,你应该知道这一点。

Murray的Active DateFormat to Anything Code改写了Ken开始的工作。 这是神奇的部分。

 if (DatePart("m", strDate) < 10) then
    twoDigMonth = "0" & DatePart("m", strDate)
 else
    twoDigMonth = DatePart("m", strDate)
 end if

 if (DatePart("d", strDate) < 10) then
    twoDigDay = "0" & DatePart("d", strDate)
 else
    twoDigDay = DatePart("d", strDate)
 end if

然后是其余的代码。 取出所有“On Error Resume Next”,因为只要您的输入得到纠正,就不需要它们。

 ' Insert Month Numbers
 strFormat = Replace(strFormat, "%m", _
          DatePart("m", strDate), 1, -1, vbBinaryCompare)

 ' Insert Month Numbers
 strFormat = Replace(strFormat, "%M", _
          twoDigMonth, 1, -1, vbBinaryCompare)

 ' Insert non-Abbreviated Month Names
 strFormat = Replace(strFormat, "%B", _
          MonthName(DatePart("m", strDate), _
          False), 1, -1, vbBinaryCompare)

 ' Insert Abbreviated Month Names
 strFormat = Replace(strFormat, "%b", _
          MonthName(DatePart("m", strDate), _
          True), 1, -1, vbBinaryCompare)

 ' Insert Day Of Month
 strFormat = Replace(strFormat, "%d", _
          DatePart("d",strDate), 1, _
          -1, vbBinaryCompare)

 ' Insert Day Of Month
 strFormat = Replace(strFormat, "%D", _
          twoDigDay, 1, _
          -1, vbBinaryCompare)

 ' Insert Day of Month Ordinal (eg st, th, or rd)
 strFormat = Replace(strFormat, "%O", _
          fncGetDayOrdinal(Day(strDate)), _
          1, -1, vbBinaryCompare)

 ' Insert Day of Year
 strFormat = Replace(strFormat, "%j", _
          DatePart("y",strDate), 1, _
          -1, vbBinaryCompare)

 ' Insert Long Year (4 digit)
 strFormat = Replace(strFormat, "%Y", _
          DatePart("yyyy",strDate), 1, _
          -1, vbBinaryCompare)

 ' Insert Short Year (2 digit)
 strFormat = Replace(strFormat, "%y", _
          Right(DatePart("yyyy",strDate),2), _
          1, -1, vbBinaryCompare)

 ' Insert Weekday as Integer (eg 0 = Sunday)
 strFormat = Replace(strFormat, "%w", _
          DatePart("w",strDate,1), 1, _
          -1, vbBinaryCompare)

 ' Insert Abbreviated Weekday Name (eg Sun)
 strFormat = Replace(strFormat, "%a", _
          WeekDayName(DatePart("w",strDate,1),True), 1, _
          -1, vbBinaryCompare)

 ' Insert non-Abbreviated Weekday Name
 strFormat = Replace(strFormat, "%A", _
          WeekDayName(DatePart("w",strDate,1),False), 1, _
          -1, vbBinaryCompare)

 ' Insert Hour in 24hr format
 str24HourPart = DatePart("h",strDate)
 If Len(str24HourPart) < 2 then str24HourPart = "0" & _
                                                 str24HourPart
 strFormat = Replace(strFormat, "%H", str24HourPart, 1, _
          -1, vbBinaryCompare)

 ' Insert Hour in 12hr format
 int12HourPart = DatePart("h",strDate) Mod 12
 If int12HourPart = 0 then int12HourPart = 12
 strFormat = Replace(strFormat, "%h", int12HourPart, 1, _
          -1, vbBinaryCompare)

 ' Insert Minutes
 strMinutePart = DatePart("n",strDate)
 If Len(strMinutePart) < 2 then _
          strMinutePart = "0" & strMinutePart
 strFormat = Replace(strFormat, "%N", strMinutePart, _
          1, -1, vbBinaryCompare)

 ' Insert Optional Minutes
 If CInt(strMinutePart) = 0 then
  strFormat = Replace(strFormat, "%n", "", 1, _
           -1, vbBinaryCompare)
 Else
  If CInt(strMinutePart) < 10 then _
           strMinutePart = "0" & strMinutePart
  strMinutePart = ":" & strMinutePart
  strFormat = Replace(strFormat, "%n", strMinutePart, _
           1, -1, vbBinaryCompare)
 End if

 ' Insert Seconds
 strSecondPart = DatePart("s",strDate)
 If Len(strSecondPart) < 2 then _
          strSecondPart = "0" & strSecondPart
 strFormat = Replace(strFormat, "%S", strSecondPart, 1, _
          -1, vbBinaryCompare)

 ' Insert AM/PM indicator
 If DatePart("h",strDate) >= 12 then
   strAMPM = "PM"
 Else
   strAMPM = "AM"
 End If

 strFormat = Replace(strFormat, "%P", strAMPM, 1, _
          -1, vbBinaryCompare)


 fncFmtDate = strFormat

将这一切捆绑成一个很好的函数调用。

Function fncFmtDate(strDate, strFormat)
'Example for your perfect GMT time in Sitemaps, RSSFeeds, Google Stuff, Cookies
'# I'm in Louisiana so I'm -6 hours from GMT 
'# fncFmtDate(DateAdd("h", -6,Now()), "%a, %d %b %H:%N:%S GMT")&"

'# Place code above here.... Don't forget the Magic part.

End Function

你有它,100%正常工作的代码。 如果你看到一个错误,那就是你的输入而不是功能。请务必遵循我列出的GMT格式示例。

我们无法为每位ASP Classic程序员提供完美的解决方案,我们提供适合我们的工作和基本代码实践 如果我认为这完全是关于复制和粘贴解决方案,那么自80年代以来我一直在发帖。 给它时间,使用错误陷阱并学习从左到右,从上到下阅读。

  

此处放置格式的解决方案:问题:输出:服务器当前   UTC时间是:2016年1月15日星期五07:42:13 UTC但我需要这种格式:   YYYYMMDDHHMMSS

以下是使用该功能获取格式的方法。看看我如何将%a更改为%Y?这些内容都在代码中。

fncFmtDate(DateAdd("h", -6,Now()), "%Y, %m %d %H:%N:%S GMT")

如果您不需要空格或逗号将其取出。但是你如何展示你想要的格式是我在ASP开发中没有看到的。

fncFmtDate(DateAdd("h", -6,Now()), ""%Y%m%d%H%N%S GMT")

使用代码,告诉它你想要的输出,阅读代码。