【问题标题】:Date span - only show end date if different than start date日期跨度 - 仅在与开始日期不同时显示结束日期
【发布时间】:2022-01-17 21:58:18
【问题描述】:

我正在显示不同活动的时间表。

有些事件是多天的,所以我想根据情况显示以下可能的显示:

1 月 25 日

1 月 25 日至 28 日

1 月 25 日至 2 月 2 日

我无法正常工作的代码是这样的:

@Html.ValueFor(modelItem => item.STARTTIME, "{0:MMM d}")

@if (@Html.ValueFor(modelItem => item.ENDTIME, "{0:MMM d}") != @Html.ValueFor(modelItem => item.STARTTIME, "{0:MMM d}"))
    {
    @:  - 

    if (@Html.ValueFor(modelItem => item.ENDTIME, "{0:MMM}") != @Html.ValueFor(modelItem => item.STARTTIME, "{0:MMM}"))
      {
        @Html.ValueFor(modelItem => item.ENDTIME, "{0:MMM d}")
      }
      else
      {
        @Html.ValueFor(modelItem => item.ENDTIME, "{0: d}")

      }

}

似乎我错过了一些简单的东西,切我无法弄清楚。它不会出错,它只是始终显示 1 月 25 日至 2 月 2 日选项,无论结束日期如何。

【问题讨论】:

  • 这是很多(显然是不必要的)@Html.ValueFor() 电话。为什么不直接使用 DateTime 值?
  • @jpieps,请解释您希望代码按顺序执行的场景,而不是显示代码和输出。您何时只想查看开始/结束日期?也尝试使用Model.ENDTIMEModel.STARTTIME。此外,使用日期时间对象进行比较,而不是解析字符串并比较字符串。这可能会产生意想不到的结果。
  • 谢谢——更清楚一点,STARTTIME 是数据库/模型中的 DATETIME 字段,而 ENDTIME 是一个字段。显示的是事件列表。有些活动是单日的,这很容易。有些活动是多天的,这也很容易。但是一些多日活动在一个月内开始并在不同的月份结束。我希望显示按我列出的那样显示,我不希望它显示 1 月 7 日 - 1 月 8 日或 1 月 7 日 - 1 月 7 日,或 1 月 7 日 - 1 日(如果 1 是在 2 月)。
  • 我需要比较的不是整个 DATETIME,而是首先查看它是否在同一天开始/结束的天数,然后查看它是否跨越一个月。

标签: c# .net model-view-controller razor


【解决方案1】:

我想我解决了....

@foreach (var item in Model)
{
     DateTime END = Convert.ToDateTime(item.ENDTIME.Value);
     DateTime START = Convert.ToDateTime(item.STARTTIME.Value);
 @Html.ValueFor(modelItem => item.STARTTIME, "{0:MMM d}") //Show start time

 @if (Convert.ToInt32(END.Month) > Convert.ToInt32(START.Month))
 {
      @:  - 
      @Html.ValueFor(modelItem => item.ENDTIME, "{0:MMM d}")
 }
 else if (Convert.ToInt32(END.Day) > Convert.ToInt32(START.Day))
 {
      @:  - 
      @Html.ValueFor(modelItem => item.ENDTIME, "{0: d}")
  }
}

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 2022-01-23
    • 1970-01-01
    • 2021-12-27
    • 2017-01-05
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多