![]() |
|
|
Published: Friday, November 20, 1998
Dan's Date Formatting Proceudre! *****************************************************************
* This article presents a custom-made date formatting procedure Special thanks to Dan S. for his WebDaily contribution! Today's WebDaily features a powerful function, an all-purpose date formatting function. While VBScript does have its own date formatting functions, it does have regional limitations. Dan's procedure fixes all of that, though, and provides the programmer with a tool to make the date formatting customizable. One thing that always used to cause me hassle was the poor support for dates in VBScript - you're limited to one or two formats, plus because I don't live in the USA things are even worse - different applications return dates in different formats, some respect my regional settings, some ignore them, some spew up if I set anything other than USA defaults. Even more annoying was that despite IIS running as a service, at times it changed date behaviours depending on the profile of the user currently logged in at the server. To get around some of these problems, I developed my own date formatting subroutine. This was inspired by the directive, which is desribed in my book of ASP programming but doesn't actually seem to work in my ASPs. I nicked all of the format parameters from it.
And call using: The resulting string will be the same as the format string, but with the following key characters replaced with the relevant date/time part (I missed a few, but they should be easy enough to add in if required): Parameter Description Example %m Month as a decimal no. 02 %b Abbreviated month name Feb %B Full month name February %d Day of the month 23 %j Day of the year 54 %y Year without century 98 %Y Year with century 1998 %w Weekday as integer 5 (0 is Sunday) %a Abbreviated day name Fri %A Weekday Name Friday %I Hour in 12 hour format 12 %H Hour in 24 hour format 24 %M Minute as an integer 01 %S Second as an integer 55 %P AM/PM Indicator PM %% Actual Percent sign %% Here is the code:
<SCRIPT RUNAT=Server LANGUAGE="VBScript">
Function DanDate (strDate, strFormat)
Dim intPosItem
Dim intHourPart
Dim strHourPart
Dim strMinutePart
Dim strSecondPart
Dim strAMPM
If not IsDate(strDate) Then
DanDate = strDate
Exit Function
End If
intPosItem = Instr(strFormat, "%m")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
DatePart("m",strDate) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%m")
Loop
intPosItem = Instr(strFormat, "%b")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
MonthName(DatePart("m",strDate),True) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%b")
Loop
intPosItem = Instr(strFormat, "%B")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
MonthName(DatePart("m",strDate),False) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%B")
Loop
intPosItem = Instr(strFormat, "%d")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
DatePart("d",strDate) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%d")
Loop
intPosItem = Instr(strFormat, "%j")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
DatePart("y",strDate) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%j")
Loop
intPosItem = Instr(strFormat, "%y")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
Right(DatePart("yyyy",strDate),2) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%y")
Loop
intPosItem = Instr(strFormat, "%Y")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
DatePart("yyyy",strDate) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%Y")
Loop
intPosItem = Instr(strFormat, "%w")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
DatePart("w",strDate,1) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%w")
Loop
intPosItem = Instr(strFormat, "%a")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
WeekDayName(DatePart("w",strDate,1),True) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%a")
Loop
intPosItem = Instr(strFormat, "%A")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & _
WeekDayName(DatePart("w",strDate,1),False) & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%A")
Loop
intPosItem = Instr(strFormat, "%I")
Do While intPosItem > 0
intHourPart = DatePart("h",strDate) mod 12
if intHourPart = 0 then intHourPart = 12
strFormat = Left(strFormat, intPosItem-1) & _
intHourPart & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%I")
Loop
intPosItem = Instr(strFormat, "%H")
Do While intPosItem > 0
strHourPart = DatePart("h",strDate)
if strHourPart < 10 Then strHourPart = "0" & strHourPart
strFormat = Left(strFormat, intPosItem-1) & _
strHourPart & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%H")
Loop
intPosItem = Instr(strFormat, "%M")
Do While intPosItem > 0
strMinutePart = DatePart("n",strDate)
if strMinutePart < 10 then strMinutePart = "0" & strMinutePart
strFormat = Left(strFormat, intPosItem-1) & _
strMinutePart & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%M")
Loop
intPosItem = Instr(strFormat, "%S")
Do While intPosItem > 0
strSecondPart = DatePart("s",strDate)
if strSecondPart < 10 then strSecondPart = "0" & strSecondPart
strFormat = Left(strFormat, intPosItem-1) & _
strSecondPart & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%S")
Loop
intPosItem = Instr(strFormat, "%P")
Do While intPosItem > 0
if DatePart("h",strDate) >= 12 then
strAMPM = "PM"
Else
strAMPM = "AM"
End If
strFormat = Left(strFormat, intPosItem-1) & _
strAMPM & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%P")
Loop
intPosItem = Instr(strFormat, "%%")
Do While intPosItem > 0
strFormat = Left(strFormat, intPosItem-1) & "%" & _
Right(strFormat, Len(strFormat) - (intPosItem + 1))
intPosItem = Instr(strFormat, "%%")
Loop
DanDate = strFormat
End Function
</SCRIPT>
Thanks for the WebDaily article, Dan!! Suggestions, comments, tips, and ideas are all welcome! Just reply to this email address or visit the Add Tips page. Happy Programming!
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||