Ở bài trước Gâu Đần đã chỉ cho các bạn cách xử lý đầu tiên khi làm việc với date time trong Marketing Cloud là Xử lý số liệu trước khi truyền vào Data Extension. Và tùy vào ngữ cảnh ta sẽ chọn hướng xử lý thích hợp cho mình, ở bài này Đần sẽ hướng dẫn cho các bạn cách xử lý còn lại.
Xử lý số liệu sau khi truyền vào Data Extension
Thường thì Đần sẽ chọn cách đầu tiên như đã nói ở bài trước tức là xử lý trước khi truyền vào. Nhưng ở một số trường hợp dữ liệu trên Data Extension có được là qua Import Activity thì khi ta tiếp cận được DE thì dữ liệu coi như đã xong, lúc này ta phải tìm cách xử lý dữ liệu từ DE.
Sử dụng SystemDateToLocalDate
ở AMPscript (option 1)
Function SystemDateToLocalDate
hay ở chỗ nó sẽ chuyển time-stamp trong DE về local time của BU (time-zone được set up của BU). Áp dụng luôn cả time-zone có DST!
%%[
set @servertime = AttributeValue('LastModifiedDate')
set @local_time = SystemDateToLocalDate(@servertime)
]%%
Your ID is: %%Id%%<br>
Last Modified Date: %%=v(@local_time)=%%
Output:
Note: nếu các bạn test ở preview mode trong content builder thì nó sẽ không convert qua đâu. Tốt nhất hãy send test và kiểm tra lại nhé.
Sử dụng DateAdd
trong AMPscript (option 2)
Nếu ta muốn chủ động và không phụ thuộc vào time-zone của user thì ta có thể tính toán lại thời gian cho time-zone mình muốn.Ví dụ ở đây vẫn là time-zone của Singapore nhé, vậy là thời gian chênh lệch là 14 tiếng giữa UTC-6 và UTC+8:
%%[
set @servertime = AttributeValue('LastModifiedDate')
set @local_time = DateAdd(@servertime, '14', 'H')
]%%
Your ID is: %%Id%%<br>
Last Modified Date: %%=v(@local_time)=%%
Output sẽ ra tương tự như option 1, cách này có lợi thế là khi dùng preview mode trong content builder thì nó sẽ hiển thị đúng luôn chứ không cần gửi email để kiểm tra.
– Vậy nếu time-zone cần chuyển có dùng DST và không phụ thuộc vào time-zone của user thì phải làm sao?
Thật sự là mình không nghĩ ra được cách nào áp dụng cả 2 điều kiện trên bằng AMPscript được cả, chỉ còn cách tạo 1 staging DE giống hệt như vậy rồi dùng SQL xử lý và truyền vào lại lần nữa như bài trước ở option 1.
Note: Nếu bạn vẫn muốn làm bằng AMPscript thì có thể tham khảo bài này của Đần.
Giờ thì cần FormatDate lại như cách ta muốn
%%[
set @servertime = AttributeValue('LastModifiedDate')
set @local_time = SystemDateToLocalDate(@servertime)
set @format_date = FormatDate(@local_time, 'dd/mm/yyyy', 'HH:mm:ss')
]%%
Your ID is: %%Id%%<br>
Last Modified Date: %%=v(@format_date)=%%
Note: Bạn format lại kiểu gì là tùy vào nhu cầu của bạn, hoặc yêu cầu của business. Ở đây Đần làm cho đồng bộ với bài trước.
Output:
Conclusion
Vậy là ta đã biết hiểu và biết cách xử lý dữ liệu Date time trên Marketing Cloud, từ đây có thêm các hướng giải quyết có thể đưa ra tùy vào ngữ cảnh gặp phải. Hy vọng từ giờ các bạn sẽ dễ dàng hơn khi làm việc trên loại dữ liệu này.
Bonus 1:
Dùng RetrieveSalesforceObjects
để kéo thẳng dữ liệu trên CRM (Sales/Service Cloud). Không khuyến khích sử dụng trên email vì load chậm.
%%[
set @Id = AttributeValue('Id')
set @data = RetrieveSalesforceObjects('Account', 'LastModifiedDate', 'Id', '=', @Id)
set @row = Row(@data, 1)
set @servertime = Field(@row, 'LastModifiedDate')
set @local_time = DateAdd(@servertime, '14', 'H')
set @local_time = FormatDate(@local_time, 'dd/mm/yyyy', 'HH:mm:ss')
]%%
Your ID is: %%Id%%<br>
Last Modified Date: %%=v(@local_time)=%%