Как конвертировать дату в определенный формат в шаблоне Freemarker или javascript



Из json я получаю значение как



"createdOn": "Jan 08 2015 20:40:56 GMT+0530 (IST)",


Я получаю доступ в сверхсветовом режиме



<#list variables as variable>
<div class="reply">
${variable.createdOn}
</div>
</#list>


Результат, который я получаю, - это



Jan 09 2015 12:36:18 GMT+0530 (IST)


Мой предпочтительный формат:
09-01-2015



Мне нужно удалить остальное время GMT, IST и так далее.



Как преобразовать это в шаблон Freemarker или javascript.



Обновить



Я пытался пройти ниже Вот так



${variable.createdOn?datetime?string("dd-MM-yyyy")}


Но это дает ошибку как



Exception: java.text.ParseException - Unparseable date: "Jan 09 2015 12:36:18 GMT+0530 (IST)"


Любая помощь-это Оцененный.



Спасибо

760   5  

5 ответов:

Прежде всего, что это вообще за формат? Я имею в виду, если вы можете повлиять на кого-то, чтобы он использовал стандартный формат (в основном ISO), это поможет всем. В любом случае, FreeMarker-это не библиотека синтаксического анализа дат, но на самом деле вы можете сделать что-то вроде этого:

<#-- Settings you need -->
<#setting date_format="dd-MM-yyyy">
<#setting locale="en_US">

<#-- The string that comes from somewhere: -->
<#assign createdOn = 'Jan 08 2015 20:40:56 GMT+0530 (IST)'>

<#--
  1. Tell FreeMarker to convert string to real date-time value
  2. Convert date-time value to date-only value
  3. Let FreeMarker format it according the date_format setting
-->
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}

Вы пробовали это?

"${variable.createdOn?datetime?string('dd-MM-yyyy')}"

Вот ссылка на документацию: http://freemarker.org/docs/ref_builtins_date.html

function convertDate( date ){
    dateSplit = date.toString().split( ' ' );
    dateSplit[1] = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1).toString() : date.getMonth() + 1;
    return dateSplit[2] + '-' + dateSplit[1] +  '-' + dateSplit[3];
}

convertDate(new Date());

Это должно сделать работу. Вы можете настроить его дополнительно

Вы можете создать свою собственную пользовательскую функцию и использовать getDate, getMonth и getFullYear методы форматирования даты.

обратите внимание, что вы должны проанализировать свой формат даты строки в объект даты.

<!DOCTYPE html>
<html>
<body>

<p>Click the button to display todays day of the month in dd-MM-yyyy format.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
    var d = new Date("Jan 08 2015 20:40:56 GMT+0530 (IST)"); //parsing your string date format into Date object.

var z = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear();
   
    document.getElementById("demo").innerHTML = z;
}
</script>

</body>
</html>

Я пошла по этому пути. Я создал объект-форматер и передал его в шаблон модели. И я называю это форматом.формат (дата) в шаблоне.

шаблон.ftl

<div class="historyOrderItem">
    <div>
    <div>Created <#if order.created??>${formatter.format(order.created)}</#if></div>
    <div>Amount ${order.amount!}</div>
    <div>Currency ${order.currency!}</div>
</div>

Ордерпрезентер.java

@Component
public class OrderPresenter {

    private static final String FORMATTER_PARAM = "formatter";
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    private static final DateTimeFormatter FORMATTER =
            DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).withZone(ZoneId.systemDefault());

    private Configuration configuration = prepareConfiguration();

    public String toHtmlPresentation(ClientDetails clientDetails) {
        try {
            Template template = configuration.getTemplate(CLIENT_DATA_TEMPLATE);
            Writer out = new StringWriter();
            template.process(toMap(clientDetails), out);
            return out.toString();
        } catch (IOException | TemplateException e) {
            throw new RuntimeException(e);
        }
    }

    private Configuration prepareConfiguration() {
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
        configuration.setDefaultEncoding(ENCODING);
        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        configuration.setLogTemplateExceptions(NOT_TO_LOG_EXCEPTIONS);
        configuration.setClassForTemplateLoading(OrderPresenter.class, TEMPLATES_FOLDER);
        return configuration;
    }

    private Map<String, Object> toMap(ClientDetails clientDetails) {
        Map<String, Object> res = new HashMap<>();
        res.put(CLIENT_DETAILS_PARAM, clientDetails);
        res.put(FORMATTER_PARAM, FORMATTER);
        return res;
    }
}

Comments

    Ничего не найдено.