日期格式校验

CREATE OR REPLACE FUNCTION FN_ISDATE(V_DATESTR VARCHAR2 --日期入参
) RETURN NUMBER – 返回1为正确,0为错误。
AS
/------------------------------------------------------------------------
公用函数:日期检查函数
调用范例: SELECT FN_ISDATE(‘20140501’) FROM DUAL;
------------------------------------------------------------------------
/
V2_DATESTR VARCHAR(20);
I_YEAR NUMBER; --年
I_MONTH NUMBER; --月
I_DAY NUMBER; --日
D_TJRQ DATE; --日期类型的日期
BEGIN

IF REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]*’, ‘’) IS NULL
THEN
RETURN 0;
END IF;

– 判断日期由数字组成
IF REGEXP_SUBSTR(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]*’, ‘’)), ‘[[:digit:]]+’) IS NULL
THEN
RETURN 0;
END IF;

IF LENGTH(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’)) > 8
OR
LENGTH(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]*’, ‘’), ’ ', ‘’)) < 6
THEN
RETURN 0;

ELSIF LENGTH(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]’, ‘’))) = 6
THEN
V2_DATESTR := SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 1, 4) || ‘0’ ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 5, 1) || ‘0’ ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]*’, ‘’), ’ ', ‘’), 6, 1);

ELSIF LENGTH(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]’, ‘’))) = 8
THEN
V2_DATESTR := RTRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]*’, ‘’));

ELSIF LENGTH(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, ‘年日*’, ‘’), ‘[[:punct:]]’, ‘’))) = 7
AND
INSTR(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘-’), ‘[[:punct:]]’, ‘-’)), ‘-’, 2) -
INSTR(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘-’), ‘[[:punct:]]’, ‘-’)), ‘-’, 1) = 1
THEN
V2_DATESTR := SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 1, 4) || ‘0’ ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 5, 1) ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 6, 2);
ELSIF LENGTH(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’))) = 7
AND
INSTR(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘-’), ‘[[:punct:]]’, ‘-’)), ‘-’, 2) -
INSTR(TRIM(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘-’), ‘[[:punct:]]’, ‘-’)), ‘-’, 1) = 2
THEN
V2_DATESTR := SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 1, 4) ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]’, ‘’), ’ ', ‘’), 5, 2) || ‘0’ ||
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(V_DATESTR, '年
’, ‘’), ‘[[:punct:]]*’, ‘’), ’ ', ‘’), 6, 1);
END IF;

– 截取出年份
I_YEAR := TO_NUMBER(SUBSTR(V2_DATESTR, 1, 4));

– 截取出月份
I_MONTH := TO_NUMBER(SUBSTR(V2_DATESTR, 5, 2));

– 截取出日期
I_DAY := TO_NUMBER(SUBSTR(V2_DATESTR, 7, 2));

– 对月份进行判断,必须在1月到12月范围之内

IF I_MONTH NOT BETWEEN 1 AND 12
THEN
BEGIN
RETURN 0;
END;
END IF;

– 对日期的判断,1,3,5,7,8,10,12月最大日为31,4,6,9,11月最大日为30,2月若为闰年则为29,其它年则为28.
IF I_DAY BETWEEN 1 AND 31
THEN
BEGIN
IF I_DAY = 31
AND I_MONTH NOT IN (1, 3, 5, 7, 8, 10, 12)
THEN
BEGIN
RETURN 0;
END;
END IF;
IF I_MONTH = 2
THEN
BEGIN
– RULES 1:普通年能被4整除且不能被100整除的为闰年。
– RULES 2:世纪年能被400整除的是闰年。
– RULES 3:对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。如172800年是闰年,86400年不是闰年。
IF ((MOD(I_YEAR, 4) = 0 AND MOD(I_YEAR, 100) <> 0) OR
MOD(I_YEAR, 400) = 0 OR
(MOD(I_YEAR, 3200) = 0 AND MOD(I_YEAR, 172800) = 0))
THEN
BEGIN
–若为闰年,则2月份最大日为29
IF I_DAY > 29
THEN
BEGIN
RETURN 0;
END;
END IF;
END;
ELSE
BEGIN
–若不为闰年,则2月份最大日为28
IF I_DAY > 28
THEN
BEGIN
RETURN 0;
END;
END IF;
END;
END IF;
END;
END IF;
RETURN 1;
END;
ELSE
RETURN 0;
END IF;
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bootstrap 可以使用 `bootstrap-datepicker` 插件来进行日期格式校验。具体步骤如下: 1. 引入 bootstrap 和 bootstrap-datepicker 的 CSS 和 JS 文件。 ```html <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap/4.5.0/js/bootstrap.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script> ``` 2. 在 HTML 中添加日期选择器,并设置日期格式校验规则。 ```html <input type="text" id="datepicker" data-provide="datepicker" data-date-format="yyyy-mm-dd" required> ``` 在这个示例中,我们使用了 `data-provide` 和 `data-date-format` 属性来设置日期选择器和日期格式。同时,我们还添加了 `required` 属性来设置日期为必填项。 3. 使用 JavaScript 初始化日期选择器,并添加校验规则。 ```javascript $(document).ready(function() { $('#datepicker').datepicker({ format: 'yyyy-mm-dd', startDate: '-3d', endDate: '+3d', autoclose: true, todayHighlight: true }); }); ``` 在这个示例中,我们使用了 `datepicker()` 方法来初始化日期选择器,并添加了一些校验规则,如 `startDate` 和 `endDate` 来限制可选日期的范围,`autoclose` 来自动关闭日期选择器,`todayHighlight` 来设置今天日期高亮显示。 这样就可以使用 bootstrap-datepicker 插件来进行日期格式校验了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值