You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SurveyJS如何限制月份输入禁止选择未来月份?

解决SurveyJS月份选择器maxValueExpression无效问题

当使用SurveyJS的inputType: "month"单行输入框时,直接用"maxValueExpression": "today()"会导致无论选择哪个月份都触发错误提示,这是因为月份输入框返回的是YYYY-MM格式的字符串,而today()返回的是完整的Date对象,两者类型不匹配,比较逻辑失效。

要实现「允许当前及过去月份、禁止未来月份、规则自动更新」的需求,只需将today()格式化为和输入值一致的YYYY-MM格式即可,具体步骤如下:

解决方案:格式化当前日期为月份格式

修改月份输入框的maxValueExpression,使用SurveyJS内置的formatDate函数将当前日期转换为yyyy-MM格式:

"maxValueExpression": "formatDate(today(), 'yyyy-MM')"

修改后的完整示例JSON

{
  "pages": [
    {
      "name": "page1",
      "elements": [
        {
          "type": "text",
          "name": "d",
          "title": "Date input (works)",
          "isRequired": true,
          "inputType": "date",
          "maxValueExpression": "today()"
        },
        {
          "type": "text",
          "name": "m",
          "title": "Month input (fixed)",
          "isRequired": true,
          "inputType": "month",
          "maxValueExpression": "formatDate(today(), 'yyyy-MM')"
        }
      ]
    }
  ]
}

原理说明

  • formatDate(today(), 'yyyy-MM')会动态生成当前月份的YYYY-MM字符串(比如2024-05),和月份输入框的返回值格式完全一致;
  • 字符串比较时,YYYY-MM格式的月份会按年份、月份顺序自然排序,确保未来月份(如2024-06)会被判定为大于当前值;
  • today()是动态函数,会随系统日期自动更新,无需手动调整规则。

内容的提问来源于stack exchange,提问作者Ariel Piyale-Anisman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:12:36