Kentico - Get/Format 日期时间

Kentico - Get/Format Date Time

我在页面模板中有以下代码,但不知道如何格式化 ReleaseDate 以显示完整的月份和年份,例如2016 年 10 月。请帮忙!

<ul class="icon-list">     
<cms:CMSWebPartZone ZoneID="ZoneLinks" runat="server" />
<li class="date inline">Published: <%= CurrentDocument.GetValue("ReleaseDate") %></li>
</ul>

在不同的转换中,我有这个 <%# GetDateTime("ReleaseDate", "MMMM yyyy") %> 并且它有效,但我不知道如何在上述上下文中使用它。我试过 CurrentDocument.GetDateTime(....),但没用。

您不能使用 transformation methods 外部转换。但是,您可以使用 vanilla .NET 方法:

<%= ((DateTime)CurrentDocument.GetValue("ReleaseDate")).ToString("MMMM yyyy") %>

如果 ReleaseDate 可以为空,请确保应用空检查。

你可以像这样直接使用C#:

<%= ((System.DateTime)CMS.DocumentEngine.DocumentContext.CurrentDocument.DocumentModifiedWhen).ToString("MMMM yyyy") %>

<%= ((System.DateTime)CMS.DocumentEngine.DocumentContext.CurrentDocument.GetValue("ReleaseDate")).ToString("MMMM yyyy") %>

这是 Kentico 宏,可以满足您的需求:

{% GetDateTime(CurrentDocument.GetValue("ReleaseDate"), "MMMM yyyy")%} 

所提供的所有答案都有效,但是。问题是任何时候您在页面模板或布局中使用 <%= %>,由于页面生命周期,它都会出错。因此,当您在 Pages 应用程序中以设计模式查看页面时,它将不可见或导致错误。

对于这样的事情,我使用了 2 种解决方案:

  • 在您的转换中放置一个 in 语句以检查它是否是最后一个并使用动态内容呈现该文本。

你的声明在你的转换中可能看起来像这样:

<%# If(IsLast(), GetDateTime("ReleaseDate", "MMMM yyyy"), "") %>

  • 将内容放在 Web 部件的内容之后部分,并使用 Zach Perry 提到的简单宏。

您的宏代码如下所示:

{% GetDateTime(CurrentDocument.GetValue("ReleaseDate"), "MMMM yyyy")%}

您可以使用:

<%= String.Format("{0:MMMM yyyy}", CurrentDocument.GetValue("ReleaseDate")) %>