输入类型日期的值是格式为 YYYY-MM-DD 的时间戳,它将被解析为 UTC,因此如果使用new Date(value)您需要获取 UTC 日期.
下面通过一条消息的显示来说明逻辑,故意取消表单提交,从而在不提交的情况下显示成功和失败。
还有许多其他方法可以实现相同的结果,例如您可以使用valueAsDate而不是而不是调用 Date 构造函数。您还可以使用允许或不允许的日期数组并对其进行测试,等等。
window.onload = () => { // Related elements let form = document.getElementById('calendar'); let msg = document.getElementById('msg'); // The listener let checkDate = evt => { // Cancel submit if called from submit if (evt.type == 'submit') evt.preventDefault(); // Value parsed as UTC so get UTC day let day = new Date(form.theDate.value).getUTCDay(); // Check if day is valid let isValid = !!(day % 2); // Do stuff based on whether isValid is true or false // Show message based on selected day let days = ['Sunday','Monday','Tuesday','Wednesay','Thursday','Friday','Saturday'] msg.textContent = `Selected day is ${days[day]}, ` + `${isValid? 'pass.' : 'fail. Must be a Monday, Wednesday or Friday'}`; return isValid; } // Attach listeners - deal with form being submitted without setting a date form.addEventListener('change', checkDate); form.addEventListener('submit', checkDate); }
您的问题似乎是您将侦听器附加到输入的更改事件,然后向该事件返回 false。
如果您只想选择奇数天(基于 ECMAScript 天编号),则该函数只需返回
!!(dayNum % 2)
的结果。输入类型日期的值是格式为 YYYY-MM-DD 的时间戳,它将被解析为 UTC,因此如果使用
new Date(value)
您需要获取 UTC 日期.下面通过一条消息的显示来说明逻辑,故意取消表单提交,从而在不提交的情况下显示成功和失败。
还有许多其他方法可以实现相同的结果,例如您可以使用valueAsDate而不是而不是调用 Date 构造函数。您还可以使用允许或不允许的日期数组并对其进行测试,等等。