datecontroll.js 1.67 KB
import { hasChinaword } from './validate';
import dayjs from 'dayjs'

function isdatetime(s) {
    if (s == null || s.toString().length < 5) {
        return false;
    }
    else if(checkDateTime(s)){
        return true;
    }
    else {
        return false;
    }

    function checkDateTime(str){
        var reg1 = /^(\d{4})-(\d{1,2})-(\d{1,2})(\s(\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/;
        var reg2 = /^(\d{4})\/(\d{1,2})\/(\d{1,2})(\s(\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/;

        if(!reg1.test(str) && !reg2.test(str)){
            return false;
        }

        var year = RegExp.$1,
            month = RegExp.$2,
            day = RegExp.$3;

        if(year < 1900){
            return false;
        }

        if(month > 12){
            return false;
        }

        if(day > 31){
            return false;
        }

        if(month == 2){
            if(new Date(year, 1, 29).getDate() == 29 && day > 29){
                return false;
            }
            else if(new Date(year, 1, 29).getDate() != 29 && day > 28){
                return false;
            }
        }

        return true;
    }
}

function diff(now, then) {
    return dayjs(now).diff(dayjs(then));
}

function isdatatypemulti(s) {
    let type = {};

    if (isdatetime(s)) {
        type["date"] = true;
    }

    if (!isNaN(parseFloat(s)) && !hasChinaword(s)) {
        type["num"] = true;
    }

    return type;
}

function isdatatype(s) {
    let type = "string";

    if (isdatetime(s)) {
        type = "date";
    }
    else if (!isNaN(parseFloat(s)) && !hasChinaword(s)) {
        type = "num";
    }

    return type;
}

export {
    isdatetime,
    diff,
    isdatatypemulti,
    isdatatype,
}