两个函数为简版函数,实现了基本的php date与strtotime功能


    /**
     * js版php date1
     * @param {string} foramt 格式化字符串,支持的格式有:"Y-m-d H:i:s w"
     * @param {string}|{int} timestamp 秒时间戳,选填,默认为当前时间戳
     * @returns {string} 日期
     */
    function date(foramt, timestamp){
        if(typeof foramt === 'undefined'){
            throw new Error('Invalid argument');
        }
        var date = timestamp ? new Date(timestamp * 1000) : new Date();
        var string = foramt
            .replace(/Y/g, date.getFullYear())
            .replace(/m/g, (function(d){
                var value = d.getMonth() + 1;
                if(value < 10){
                    value = '0' + value;
                }
                return value;
            })(date))
            .replace(/d/g, (function(d){
                var value = d.getDate();
                if(value < 10){
                    value = '0' + value;
                }
                return value;
            })(date))
            .replace(/H/g, (function(d){
                var value = d.getHours();
                if(value < 10){
                    value = '0' + value;
                }
                return value;
            })(date))
            .replace(/i/g, (function(d){
                var value = d.getMinutes();
                if(value < 10){
                    value = '0' + value;
                }
                return value;
            })(date))
            .replace(/s/g, (function(d){
                var value = d.getSeconds();
                if(value < 10){
                    value = '0' + value;
                }
                return value;
            })(date))
            .replace(/w/g, (function(d){
                var value = d.getDay();
                if(!value){
                    value = 7;
                }
                return value;
            })(date))
        ;
        return string;
    }

/**
     * js版php strtotime
     * @param {string}|{int} time 时间表达式,若无参数,函数返回当前秒时间戳,若有参数,则为获取时间表达式,与php用法相同
     * @param {string}|{int} now 秒时间戳,用于时间表达式的参考时间戳,选填,若无参数,则应用当前秒时间戳
     * @returns {number} 时间戳
     */
    function strtotime(time, now){
        if(typeof time === 'undefined'){
            return parseInt(+new Date() / 1000);
        }
        var date_match = time.match(/^\d{4}(\/|\-)\d{2}(\/|\-)\d{2}$/g);
        if(date_match !== null){
            var s = date_match[0].split(date_match[0].substr(4, 1));
            return parseInt(+new Date(s[0], s[1] - 1, s[2]) / 1000);
        }else{
            var date = now ? new Date(now * 1000) : new Date();
            var m = time.match(/(\+|\-)\d+ (year|month|day|hour|minute|second|week)/g);
            if(m){
                var arr, value, unit;
                for(var i = 0; i < m.length; i++){
                    arr = m[i].split(' ');
                    value = parseInt(arr[0]);
                    unit = arr[1];
                    switch(unit){
                        case 'year':
                            date.setFullYear(date.getFullYear() + value);
                            break;
                        case 'month':
                            date.setMonth(date.getMonth() + value);
                            break;
                        case 'day':
                            date.setDate(date.getDate() + value);
                            break;
                        case 'hour':
                            date.setHours(date.getHours() + value);
                            break;
                        case 'minute':
                            date.setMinutes(date.getMinutes() + value);
                            break;
                        case 'second':
                            date.setSeconds(date.getSeconds() + value);
                            break;
                        case 'week':
                            date.setDate(date.getDate() + (value * 7));
                            break;
                    }
                }
            }
            return parseInt(+date / 1000);
        }
    }

发表评论

必填项已用*标注