To read the article online, visit http://www.4GuysFromRolla.com/webtech/112098-2.shtml

WebDaily: Your daily source for Web Technology Tips and Tricks!


*****************************************************************
Dan's Date Formatting Proceudre!
*****************************************************************

A More Up-To-Date Script
A more up-to-date version of this script exists has been posted by Ken Schaefer in his article: A Customizable Date Formatting Routine. Ken has fixed some small typos and cleaned up the code a bit. Be sure to use this more up-to-date version!

* 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.

<!--#INCLUDE FILE="DanDate.inc"-->
(change the path if necessary)

And call using:
strFormattedDate = DanDate(dtmDate, strFormat)
dtmDate should be a Date variable
strFormat should be a template for the output date.

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!


*****************************************************************
*****************************************************************
To subscribe to WebDaily, point your browser to:
http://www.4GuysFromRolla.com/webtech/webdaily
*****************************************************************
*****************************************************************

Please forward this information to a friend, including the subscription URL! Happy Programming!


Article Information
Article Title: Customizable Date Formatting Proceudre
Article Author: Scott Mitchell
Published Date: Friday, November 20, 1998
Article URL: http://www.4GuysFromRolla.com/webtech/112098-2.shtml


Copyright 2017 QuinStreet Inc. All Rights Reserved.
Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers