当我将列格式应用于“仅日期”日期列时,时间值也会显示

问题描述

我有一个日期列,设置为仅显示日期(不是时间),名为 My Date Column

我应用了下面的列格式,实现了所需的行为

  • 如果列值为 more than 30 days in the future,则将文本颜色设为 green显示 checkmark 图标
  • 如果列值为 between today and 30 days in the future,则将文本颜色设为 red显示 AlarmClock 图标
  • 如果列值为 today or in the past,则将文本颜色设为 red显示 Important 图标
{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json","elmType": "div","style": {
    "color": "=if([$My_x0020_Date_x0020_Column]>(@Now +2592000000),'green',if([$My_x0020_Date_x0020_Column]>@Now && [$My_x0020_Date_x0020_Column]< (@Now +2592000000),'Red','Red'))"
  },"children": [
    {
      "elmType": "span","style": {
        "display": "inline-block","padding": "0 10px 0 10px"
      },"attributes": {
        "iconName": "=if(Number([$My_x0020_Date_x0020_Column]) == 0,'',if([$My_x0020_Date_x0020_Column]>(@Now +2592000000),'checkmark','AlarmClock','Important'))"
      }
    },{
      "elmType": "span","txtContent": "@currentField"
    }
  ]
}

但是,当我更改最后一个 span 的列格式时:

{
  "elmType": "span","txtContent": "@currentField"
}

为此:

{
  "elmType": "span","txtContent": "=if(Number(@currentField) == 0,'N/A',@currentField)"
}

它产生以下内容

  • Desired BehavIoUr:如果该字段为空,则显示文本 N/A
  • 不良行为:如果该字段不为空,则在 TIME 值之后显示一个 DATE

为了澄清,它显示了这一点:

29/11/2021 23:00:00

什么时候应该显示

29/11/2021     

此外,日期值与 if() 语句中日期时显示的值不同。在 @currentField 语句中包含 if() 的行为正在改变显示方式以及显示的日期

问题

为什么时间值显示date only 列中,如何在保留所需条件列格式的同时防止这种情况发生?

编辑

基于 this answer,将 @currentField 包装在 =toLocaleDateString() 中似乎有效,即:

{
  "elmType": "span",'=toLocaleDateString(@currentField)')"
}

但是,使用 toLocaleDateString()不良行为,如果我在列表项中输入 01/01/2021 作为日期,它会显示作为前端的 31/12/2020

我认为这是因为该方法用户的本地时间输出值,(from the docs)

toLocaleDateString():返回仅日期日期部分的语言敏感表示
"txtContent":"=toLocaleDateString(@Now)"
结果因用户的语言环境而异,但 en-us 看起来像 "2/5/2019"

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)