DATE COMPARISON

DATE COMPARISON FUNCTION IN CLOUD PAGE

PROBLEM STATEMENT :

WE HAVE WEBINAR DATE STORED IN UTC FORMAT AND WHEN WE COMPARE THE DATE WITH SYSTEM DATE , IT SOMETIMES WORK WEIRD. HERE IS THE CODE.
%%[
    IF SystemDateToLocalDate('2022-10-31T10:00:00Z') > SystemDateToLocalDate(Now()) THEN
    SET  @MESSAGE='WEBINAR IS  ACTIVE'
    ELSE
    SET @MESSAGE='WEBINAR HAS EXPIRED'
    ENDIF
]%%

SOMETIMES IT WORKS AS INTENDED , BUT , SOMETIMES ITS OPPOSITE.


ANALYSIS :

AMPscript Date and Time Formatting states : Quote " AMPscript assumes all date datatype values use en-US or UTC formatting. You can output several different date and time formats with AMPscript, depending on your needs." Unquote 


FORMAT () :
THIS AMPSCRIPT FUCNTION FORMATS BASED ON CURRENCY , DEFINES 2nd PARMETER AS C# COMPATIBLE STRING, SO TO CONVERT DATE, IT'S RECOMMENDED TO AVOID THIS FUCNTION

FORMATDATE() :
THIS USES RFC-1123 COMPATIBLE VALUE , RECOMMENDED TO USE THIS FUCNTION

NOW() :
THIS RETURNS SERVER DATE AND TIME. IT CLEARLY STATES THAT IT DOES NOT REFELCT WHEN THE ACTUAL SEND OCCURRED. ALSO, NOW() USE CST TIME WITHOUT DAYLIGHT SAVINGS.
IF YOU WANT TO USE TO CAPTURE THE ACTUAL SEND TIME, USE THE FUNCTION GETSENDTIME()

LOCALDATETOSYSTEMDATE()
USE THIS FUCNTION TO CONVERT THE DATE BEFORE STORING THE CAPTURED DATE  FROM END USERS, SPECIALLY  WHEN YOU ARE TARGETING THE END USER ACROSS REGIONS, OR USE FORMATE DATE TO CONVERT THE DATE INTO CST TIME ZONE.


SYSTEMDATETO LOCALDATE()
USE THIS FUCNTION, SPECIALLY WHEN YOU ARE ALLOWING USER TO DOWNLAOD CALENDAR IN AN ICS FORMAT. IT WILL SET THE MEETING INVITE  TIME TO THE LOCAL TIME ZONE OF THE USER.

CANDENCE :

HERE IS THE FULL COMPARISON OF THE DATE FUNCTIONS:

       
%%[
    SET @webinarStartTimeInUTC = '2022-10-31T10:00:00Z'
    SET @webinarStartTimeInCST = FormatDate(@webinarStartTimeInUTC,"MM/dd/yyyy","l", "en-US")
    SET @systemTime=Now()
    SET @systemTimeCST= FormatDate(@systemTime, "MM/dd/yyyy","l", "en-US")
    SET @webinarStartTimeInLocalDate= SystemDateToLocalDate(@webinarStartTimeInUTC)      
    SET @systemTimeLocalDate= SystemDateToLocalDate(@systemTime)
     IF DateDiff(@webinarStartTimeInCST,@systemTimeCST, 'D') <= 0 THEN    
      SET @MESSAGE_CST= 'WEBINAR IS ACTIVE USING CST FORMAT'      
     ELSE
      SET @MESSAGE_CST= 'WEBINAR HAS EXPIRED USING CST FORMAT'  
     ENDIF
 
    IF DateDiff(@webinarStartTimeInLocalDate,@systemTimeLocalDate, 'D') <= 0 THEN  
      SET @MESSAGE_LOCAL=' WEBINAR IS ACTIVE USING LOCAL DATE'  
    ELSE  
    SET @MESSAGE_LOCAL='WEBINAR HAS EXPIRED USING LOCAL DATE'
    ENDIF
       
    IF @webinarStartTimeInLocalDate > @systemTimeLocalDate THEN
       SET @MESSAGE_OPERATOR_LOCAL= 'WEBINAR IS ACTIVE USING LOCAL DATE'  
    ELSE  
      SET @MESSAGE_OPERATOR_LOCAL= 'WEBINAR HAS EXPIRED USING LOCAL DATE'  
    ENDIF

    IF @webinarStartTimeInCST > @systemTimeCST THEN  
      SET @MESSAGE_OPERATOR_CST= 'WEBINAR IS ACTIVE USING LOCAL DATE'  
    ELSE
      SET @MESSAGE_OPERATOR_CST='WEBINAR HAS EXPIRED USING LOCAL DATE'  
    ENDIF

    IF SystemDateToLocalDate(@webinarStartTimeInUTC) >  SystemDateToLocalDate(Now()) THEN  
      SET @MESSAGE_OPERATOR_CST_OLD= 'WEBINAR IS ACTIVE USING LOCAL DATE'  
    ELSE  
      SET @MESSAGE_OPERATOR_CST_OLD= 'WEBINAR HAS EXPIRED USING LOCAL DATE'
    ENDIF
       
    IF SystemDateToLocalDate('2022-10-31T10:00:00Z') > SystemDateToLocalDate(Now()) THEN  
      SET @MESSAGE_LOCAL_COMPARE_OPRATOR_OLD= 'WEBINAR IS ACTIVE USING LOCAL DATE OPERATOR OLD'  
    ELSE  
      SET @MESSAGE_LOCAL_COMPARE_OPRATOR_OLD= 'WEBINAR HAS EXPIRED USING LOCAL DATE OPERATOR OLD'
    ENDIF
]%%

ALL THE IF-ELSE WORKS PERFECTLY EXCEPT THE LAST 2, INTERMITTEN ISSUES ARE OBSERVED BECAUSE OF THE INPUT PARAMTERS THAT HAS BEEN PASSED ARE NOT IN THE SAME FORMAT.

HOW SHOULD WE COMPARE DATES IN AMPSCRIPT ?

ALWAYS CONVERT BOTH THE DATES INTO CST (SYSTEM TIME)  FORMAT WITH A CULTURE CODE BEFORE MAKING ANY COMPARISON, INCLUDING NOW() FUNCTION,  BEACUSE , THE OUTPUT FOR "M" VARIES DEPENDING ON WHETHER "M" IS USED AS A SINGLE FUNCTION OR A GROUP OF FUNCTIONS.

 HERE IS THE EXAMPLE:
%%[
    SET @webinarStartTimeInUTC = '2022-08-31T15:00:00Z'
    SET @webinarStartTimeInCST =
FormatDate(@webinarStartTimeInUTC, "MM/dd/yyyy", "l", "en-US")      
    SET @systemTime=Now()      
    SET @systemTimeCST= FormatDate(@systemTime, "MM/dd/yyyy", "l", "en-US")        
    IF DateDiff(@webinarStartTimeInCST, @systemTimeCST, 'D') <= 0 THEN        
      SET @MESSAGE='WEBINAR IS ACTIVE'
    ELSE
      SET @MESSAGE='WEBINAR HAS EXPIRED'
    ENDIF      
]%%
%%=v(concat('Webinar Start TIme UTC:', @webinarStartTimeInUTC))=%%
%%=v(concat('Webinar Start TIme CST:', @webinarStartTimeInCST))=%%
%%=v(concat('System Time  CST m/d/yyyy format: ', @systemTime))=%%
%%=v(concat('System Time CST mm/dd/yyyy format: ', @systemTimeCST))=%%
%%=v(@MESSAGE)=%%



Comments


Knowledge Article

Most Viewed

CLOUD PAGE ENABLEMENT - PART 1

EMAIL NOT SENT IN JOURNEY BUILDER

CONSIDERATIONS FOR JOURNEY BUILDER

Journey Builder REST API Documentation

Preference Center Demystified

Popular Posts

CLOUD PAGE ENABLEMENT - PART 1

EMAIL NOT SENT IN JOURNEY BUILDER

CONSIDERATIONS FOR JOURNEY BUILDER

Journey Builder REST API Documentation

Preference Center Demystified

SEND LOG EANBLEMENT

Share with Friends

Disclaimer:

The information provided on this technical blog is for general informational purposes only. As a SFMC (Salesforce Marketing Cloud) Technical Architect, I strive to offer accurate and up-to-date content related to SFMC and its associated technologies. However, please note that technology is constantly evolving, and the information provided may become outdated or inaccurate over time.

The content published on this blog represents my personal views and experiences as a SFMC Technical Architect and does not necessarily reflect the official views or opinions of any organization or employer I may be affiliated with.

While I make every effort to ensure the accuracy and reliability of the information presented, I cannot guarantee its completeness, suitability, or applicability to your specific circumstances. Therefore, it is essential to verify any information provided and make your own independent assessments or seek professional advice if needed.

Furthermore, any actions taken based on the information provided on this blog are at your own risk. I shall not be held liable for any damages, losses, or inconveniences arising from the use of the information presented here.

Please keep in mind that SFMC and its associated technologies are complex and require technical expertise for proper implementation and management. It is recommended to consult with qualified professionals or official SFMC documentation for comprehensive guidance.

Finally, please note that any product or company names mentioned on this blog are trademarks or registered trademarks of their respective owners. The mention of these trademarks or registered trademarks does not imply any endorsement or affiliation with the blog.

By accessing and using this blog, you agree to the terms of this disclaimer. If you do not agree with any part of this disclaimer, please refrain from using this blog.