Need help in Date Time conversion along with timezone and matching for Validation in an Interface

Certified Associate Developer

Hi Experts,

Need your help in the following issue:

Here is a validation for a Date and Time(captured in text) field along with the Timezone as shown below.

/*Code -- Test_Rule_Timezone*/
/*We are getting Date and Time and the Timzezone selected by the user from the dropdown*/
/*Based on the Timezone selection(cons!CDM2_VAL_STANDARD_TIMEZONE) we are subtracting the hours 
that is stored in the constant(cons!TEST_CONS_TIMEZONE) from the date and time selected by the user*/
a!localVariables(
  local!hours: a!match(
    value: ri!timezone,
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[1],
    then: cons!TEST_CONS_TIMEZONE[1],
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[2],
    then: cons!TEST_CONS_TIMEZONE[2],
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[3],
    then: cons!TEST_CONS_TIMEZONE[3],
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[4],
    then: cons!TEST_CONS_TIMEZONE[4],
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[5],
    then: cons!TEST_CONS_TIMEZONE[5],
    equals: cons!CDM2_VAL_STANDARD_TIMEZONE[6],
    then: cons!TEST_CONS_TIMEZONE[6],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[1],
    then: cons!TEST_CONS_TIMEZONE[8],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[2],
    then: cons!TEST_CONS_TIMEZONE[9],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[3],
    then: cons!TEST_CONS_TIMEZONE[10],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[4],
    then: cons!TEST_CONS_TIMEZONE[11],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[5],
    then: cons!TEST_CONS_TIMEZONE[12],
    equals: cons!CDM2_VAL_DAYLIGHT_TIMEZONE_DISPLAY[6],
    then: cons!TEST_CONS_TIMEZONE[13],
    default: 0
  ),
  local!minutes: tointeger(index(split(local!hours,":"),2,0)),
  if(
    a!isNullOrEmpty(ri!dateTime),
    null(),
    a!subtractDateTime(ri!dateTime,0,0,0,local!hours,local!minutes)
    )
)

I need to validate that the Search Start Date + Search Start Time + Timezone -----should be less than the current system timezone,

Search End Date + Search End Time + Timezone -----should be less than the current system timezone.

Also Search Start Date + Search Start Time + Timezone(UTC)  <  Search End Date + Search End Time + Timezone(like UTC-7).

I am attaching the code for the same, need your help as I am not able to get the desired output.

Thank you in advance for your help!

  Discussion posts and replies are publicly visible

  • 0
    Certified Associate Developer

    /*Code for the Validation*/
    
    if(rule!Test_Rule_Timezone(timezone: fv!item.timeZone, dateTime: fv!item.startSearchDateTime) > rule!CDM2_DateTime_Converter(     date: todate(split(now()," ")[1]),     time: text(gmt(local(now(),"GMT")), "mm/dd/yyyy hh:mm:ss")   ),
                            "Please select a Date Time on or before current Date Time.",
                            if(
                              and(
                                a!isNotNullOrEmpty(fv!item.startSearchDate),
                                a!isNotNullOrEmpty(fv!item.endSearchDate),
                                rule!Test_Rule_Timezone(timezone: fv!item.timeZone, dateTime: fv!item.startSearchDateTime) > rule!Test_Rule_Timezone(timezone: fv!item.timeZone, dateTime: fv!item.endSearchDateTime)
                              ),
                              "'Search Start Date Time' can not be after 'Search End Date Time'",
                              {}
                            )
                            ), 

  • 0
    Certified Senior Developer

     
    I would suggest you to convert date and time text to datetime type using below expression.

    a!localVariables(
    local!dateAndTime: split("2024-03-30 07:21:55", " "),
    local!date: split(local!dateAndTime[1], "-"),
    local!time: split(local!dateAndTime[2], ":"),
    datetime(
    local!date[1],
    local!date[2],
    local!date[3],
    local!time[1],
    local!time[2],
    local!time[3]
    )
    )

    Then output for this you can convert to user time zone and compare.

  • 0
    Certified Associate Developer
    in reply to Shubham Aware

    Thank you for the help  , I convert date and time text to datetime type but still I am unable to achieve the desired output.

    I need to validate that the Search Start Date Time + Timezone -----should be less than the current system timezone,

    Search End Date Time + Timezone -----should be less than the current system timezone.

    Also Search Start Date Time + Timezone selected  <  Search End Date Time + Timezone selected

    Could you please help me verify my code:

    if(
                              and(
                                a!isNotNullOrEmpty(fv!item.startSearchDateTime),
                                a!isNotNullOrEmpty(fv!item.timeZone)
                                a!isNotNullOrEmpty(fv!item.endTimeZone),
                                a!isNotNullOrEmpty(fv!item.endSearchDateTime),
                              ),                        
                              {
                                if(
                                gmt(
                                  fv!item.startSearchDateTime,
                                  fv!item.timeZone
                                )
                              > gmt(now()),
                              "Please select a Date Time on or before current Date Time.",
                              {}
                              ),
                               if(
                                    gmt(
                                      fv!item.startSearchDateTime,
                                      fv!item.timeZone
                                    )
                                   > 
                                    gmt(
                                      fv!item.endSearchDateTime,
                                      fv!item.endTimeZone
                                    ),
                                "'Search Start Date Time' can not be after 'Search End Date Time'",
                                {}
                              )
                              },
                             {}
                            )