关于在使用parseInt进行日期判断需要注意的地方
来源:互联网 发布:李兰娟院士知乎 编辑:程序博客网 时间:2024/06/05 20:20
今日,在做一个关于日期判断的一个小函数,是用javascript做的,发现一个BUg,代码如下:
function checkDate(arg_intYear,arg_intMonth,arg_intDay,year,period)
{
if(arg_intMonth.length!=2||arg_intDay.length!=2){
alert("月份、天数必须为2位");
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else{
if((parseInt(arg_intMonth)-3 != arg_intMonth-3 )||(parseInt(arg_intMonth) > 12 ) || (parseInt(arg_intMonth) < 1 ))
{
alert('月份不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else
{
if((parseInt(arg_intDay)-3 != arg_intDay-3 )||(parseInt(arg_intDay) > 31 )|| (parseInt(arg_intDay) < 1 ) )
{
alert('天数不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else
{
if((parseInt(arg_intYear)-3 != arg_intYear-3 )||(parseInt(arg_intYear) < 1000 ) ||(parseInt(arg_intYear) > 5000 ))
{
alert('年份格式不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
if((parseInt(arg_intYear)-year)*12+(parseInt(arg_intMonth)-period)<0)
{
alert('不能输入期间以前的数据!');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
}
}
}
}
function cheDate(year,period){
var ghnn,lkjh;
lkjh=document.getElementById("fdate").value;
ghnn=lkjh.split("-");
if(ghnn.length==3){
checkDate(ghnn[0],ghnn[1],ghnn[2],year,period);
}else{
alert("日期格式不正确!格式应为(如): 2000-01-01");
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
}
当fdate中输入类似于2012-07-09时会报错,提示天数错误,百思不得其解,后来调试了下,发现parseint('09‘)时竟然输出了0,之后查了parseint函数的解释才明白这点,解释如下:
parseInt() 函数可解析一个字符串,并返回一个整数。
语法
parseInt(string, radix)
参数
描述
string
必需。要被解析的字符串。
radix
可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值
返回解析后的数字。
说明
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
也就是说当第一位为0时,则会判断错误,当做8进制来处理了,所以出错了。之后这样就好了:
function checkDate(arg_intYear,arg_intMonth,arg_intDay,year,period)
{
if(arg_intMonth.length!=2||arg_intDay.length!=2){
alert("月份、天数必须为2位");
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else{
if((parseInt(arg_intMonth)-3 != arg_intMonth-3 )||(parseInt(arg_intMonth) > 12 ) || (parseInt(arg_intMonth) < 1 ))
{
alert('月份不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else
{
if((parseInt(arg_intDay)-3 != arg_intDay-3 )||(parseInt(arg_intDay) > 31 )|| (parseInt(arg_intDay) < 1 ) )
{
alert('天数不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
else
{
if((parseInt(arg_intYear)-3 != arg_intYear-3 )||(parseInt(arg_intYear) < 1000 ) ||(parseInt(arg_intYear) > 5000 ))
{
alert('年份格式不正确');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
if((parseInt(arg_intYear)-year)*12+(parseInt(arg_intMonth)-period)<0)
{
alert('不能输入期间以前的数据!');
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
}
}
}
}
function cheDate(year,period){
var ghnn,lkjh;
lkjh=document.getElementById("fdate").value;
ghnn=lkjh.split("-");
if(ghnn.length==3){
checkDate(ghnn[0],ghnn[1],ghnn[2],year,period);
}else{
alert("日期格式不正确!格式应为(如): 2000-01-01");
if(period<10)period="0"+period;
document.getElementById("fdate").value=year+"-"+period+"-01";
}
}
解决了问题
- 关于在使用parseInt进行日期判断需要注意的地方
- 关于inet_ntoa使用需要注意的地方
- 关于block使用需要注意的地方
- 关于在Linux下使用select函数需要注意的地方
- 关于Stm8库函数使用需要格外注意的地方
- 在FLEX中使用CSS需要注意的地方
- 在使用GROUP BY 时候需要注意的地方
- 关于Servlet需要注意的地方
- 关于rand()函数需要注意的地方
- 关于sizeof需要注意的地方
- 关于开车需要注意的地方
- 关于thrift需要注意的地方
- 关于AIDL一些需要注意的地方
- 关于电子钱包需要注意的地方
- javascript函数parseInt()使用中需要的注意点
- 使用Integer.parseInt()需要注意的问题分析
- 【JavaScript】parseInt() 数值转换的注意地方
- 使用Win2003需要注意的地方
- 写的一个删除文件的小例子
- 跟我学编程(4)
- Android之Telephony各文件解释
- 富翁的17种思考方式
- VC连接MySQL
- 关于在使用parseInt进行日期判断需要注意的地方
- window service 学习之路(四)【学习笔记】-- 调用外部EXE程序
- Delphi窗体的close,free,destroy等
- JAVA正则表达式
- JSP输入框空验证:利用onblur标签实现的移动鼠标时的验证
- 古往今来中国最经典的50句名言
- 黑马程序员-金额转换,阿拉伯数字的金额转换成中国传统的形式
- 首发Zend Studio 9.0.3正式版注册破解(2012-07-04更新)
- iBatis三个版本的区别