4

ISO8601形式(例)の日付を持つFreemarkerのオブジェクトがありますが、それと2012-02-01T13:01:02+0000現在の日数の違いをどのように計算しますか?

他のJava以外のシナリオでは、UNIXタイムスタンプとして再フォーマットして計算を行いdistance_of_time_in_wordsます(RoRやSymfonyの関数など)が、私が見る限り、FreemarkerはISO8601タイムスタンプをUNIXタイムスタンプに変換できません。

そして、はい、私はテンプレートレイヤーがおそらくこの種のことを行うのに適切な場所ではないことを理解していますが、ニーズなどが必要です。

4

1 に答える 1

11

日数の違いによって、2つの日付の間に24時間が経過した回数を意味する場合、この式はそれを行います(このように機能するには、少なくともFreeMarker 2.3.17が必要です?long)。

(
  (
    s2?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
    - s1?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
  ) / (1000 * 60 * 60 * 24)
)?int

より良いアプローチは、を実装してJavaで関数を実装することTemplateMethodModelExです。テンプレートはそれを<#assign distanceInDays = 'com.example.DistanceInDaysMethod'?new()>(これを一般的に#include-dまたは#import-edファイルに入れる)で取り込むことができ、それからそれをとして使用することができますdistanceInDays(s1, s2)

于 2012-07-10T17:28:54.257 に答える