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!

Comments

© 2010, Stephen J. Withington, Jr.  |  BlogCFC was created by Raymond Camden – Version 5.9.004

Creative Commons License  |  This work is licensed under a Creative Commons Attribution 3.0 Unported License.