Как конвертировать дату в определенный формат в шаблоне 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)"
Любая помощь-это Оцененный.
Спасибо
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