Simple User-Defined Function (UDF) to Convert Server Date/Time Stamp Into Local North American Time
Very often, a web server is located in a different time zone from the majority of the visitors (and owner) of a web site. I came up with this user-defined function (UDF) to return a timestamp in the web site owner's local North American timezone. This way, reports, emails, etc. can all have a consistent timestamp.
Valid time zones for North America are: newfoundland, atlantic, eastern, central, mountain, pacific, hawaii, utc. Obviously, I'm using more user-friendly terminology here than EST, CDT, etc.
For more information on North American time zones, visit http://www.timeanddate.com/library/abbreviations/timezones/na/.
This function returns a string as a timestamp. For example: {ts '2010-01-01 01:00:00'}. You can then use dateFormat() and/or timeFormat() to output as desired.
Examples
<cfoutput>
Central: #getNorthAmericanTimeStamp('central')#<br />
Pacific: #dateFormat(getNorthAmericanTimeStamp('pacific'), 'mm/dd/yyyy')#<br />
Hawaii: #timeFormat(getNorthAmericanTimeStamp('hawaii'), 'h:mm:ss tt')#
</cfoutput>
The Code
<!--- Info --------------------------------------------------------------------------------------------------
Document: getNorthAmericanTimeStamp.cfc
Author: Steve Withington (steve [at] stephenwithington [dot] com)
Creation Date: 01/08/2010
Copyright: (c) 2010 Stephen J. Withington, Jr. | www.stephenwithington.com
Purpose: I convert the server date/time to any North American timezone date/timestamp.
Pass me a timezone, and I'll convert my server date/time to the preferred timezone's
date/time and pass it back to you.
Revision Log / Notes:
01/08/2010 sjw First release.
-------------------------------------------------------------------------------------------------- /Info --->
<cffunction name="getNorthAmericanTimeStamp" returntype="string" output="false" access="remote">
<cfargument name="timeZone" type="string" required="false" default="eastern" />
<cfscript>
var local = structNew();
local.t = structNew();
local.t.dts = now();
local.t.tzi = getTimeZoneInfo();
local.t.utc = dateAdd("s", local.t.tzi.utcTotalOffset, local.t.dts);
local.timeZones = "newfoundland,atlantic,eastern,central,mountain,pacific,hawaii,utc";
if ( local.t.tzi.isDSTon ) {
local.t.newfoundland = dateAdd("n", -150, local.t.utc);
local.t.atlantic = dateAdd("h", -3, local.t.utc);
local.t.eastern = dateAdd("h", -4, local.t.utc);
local.t.central = dateAdd("h", -5, local.t.utc);
local.t.mountain = dateAdd("h", -6, local.t.utc);
local.t.pacific = dateAdd("h", -7, local.t.utc);
local.t.hawaii = dateAdd("h", -9, local.t.utc);
} else {
local.t.newfoundland = dateAdd("n", -210, local.t.utc);
local.t.atlantic = dateAdd("h", -4, local.t.utc);
local.t.eastern = dateAdd("h", -5, local.t.utc);
local.t.central = dateAdd("h", -6, local.t.utc);
local.t.mountain = dateAdd("h", -7, local.t.utc);
local.t.pacific = dateAdd("h", -8, local.t.utc);
local.t.hawaii = dateAdd("h", -10, local.t.utc);
};
if ( listFindNoCase(local.timeZones, arguments.timeZone, ",") ) {
switch(arguments.timeZone) {
case "newfoundland":
return local.t.newfoundland;
break;
case "atlantic":
return local.t.atlantic;
break;
case "eastern":
return local.t.eastern;
break;
case "central":
return local.t.central;
break;
case "mountain":
return local.t.mountain;
break;
case "pacific":
return local.t.pacific;
break;
case "hawaii":
return local.t.hawaii;
break;
case "utc":
return local.t.utc;
break;
default:
return local.t.eastern;
};
} else {
return local.t.eastern;
};
</cfscript>
</cffunction>
Hope this helps!




There are no comments for this entry.
[Add Comment]