如何从HTML5 Date字段提取日和月并进行比较?
解决HTML5 Date输入框提取月日并比较的问题
嘿,我来帮你搞定这个问题!首先得先说说你之前遇到NaN的原因:HTML5的date输入框的日期值是存在value属性里的,而不是innerHTML,所以你用innerHTML拿到的是空字符串,Date.parse()解析空字符串自然会返回NaN啦。
下面给你两种可靠的解决方法:
方法一:直接截取字符串(简单高效)
因为HTML5的date输入框返回的value是固定的YYYY-MM-DD格式,所以我们可以直接截取字符串的后5位来得到MM-DD:
<input autocomplete="off" type="date" class="form-control" id="date_cust" name="date_cust" required /> <script> var date_input = document.getElementById('date_cust'); date_input.onchange = function(){ // 截取从第5位开始的子串,得到MM-DD格式 var extracted_data = date_input.value.slice(5); // 注意:JS变量名不能以数字开头,所以把31march改成march31 var march31 = '03-31'; if (extracted_data === march31) { alert("Happy Birthday"); } else { alert("Not your birthday yet."); } } </script>
方法二:用Date对象处理(更灵活)
如果以后需要处理其他日期格式,或者要做更多日期相关的操作,用Date对象会更稳妥。需要注意的是,JS里的月份是从0开始计数的(0代表1月),所以要给月份加1,还要用padStart(2, '0')确保月份和日期都是两位数字:
<input autocomplete="off" type="date" class="form-control" id="date_cust" name="date_cust" required /> <script> var date_input = document.getElementById('date_cust'); date_input.onchange = function(){ // 用value创建Date对象 var selectedDate = new Date(date_input.value); // 获取月份并转成两位数字(加1是因为JS月份从0开始) var month = String(selectedDate.getMonth() + 1).padStart(2, '0'); // 获取日期并转成两位数字 var day = String(selectedDate.getDate()).padStart(2, '0'); var extracted_data = `${month}-${day}`; var march31 = '03-31'; if (extracted_data === march31) { alert("Happy Birthday"); } else { alert("Not your birthday yet."); } } </script>
另外还要提醒你:你原来写的var 31march = '03-31';是不合法的JS语法,变量名不能以数字开头,所以改成march31或者march_31这类符合规范的名字哦。
内容的提问来源于stack exchange,提问作者kank95
相关产品推荐
相关产品推荐

