如何在 jquery ui datepicker 和 moment.js 使用的日期格式之间进行转换? [关闭]

2024-03-11

日期格式化字符串在 jQuery UI datepicker、moment.js、.Net 的 DateTime 类中具有不同的规则。如何在这些不同的格式之间进行转换?

Update:现在在github上:https://github.com/deerchao/dateformats https://github.com/deerchao/dateformats


使用 TypeScript 版本如下:

var j = dateFormat.convert('YYYY-MM-DD', dateFormat.momentJs, dateFormat.datepicker);

这是 TypeScript 版本:

module dateFormat {
    export interface formatRules {
        DayOfMonthShort : string;
        DayOfMonthLong : string;
        DayOfWeekShort : string;
        DayOfWeekLong : string;
        DayOfYearShort : string;
        DayOfYearLong : string;
        MonthOfYearShort : string;
        MonthOfYearLong : string;
        MonthNameShort : string;
        MonthNameLong : string;
        YearShort : string;
        YearLong : string;
        AmPm : string;
        Hour24Short : string;
        Hour24Long : string;
        Hour12Short : string;
        Hour12Long : string;
        MinuteShort : string;
        MinuteLong : string;
        SecondShort : string;
        SecondLong : string;
        FractionalSecond1 : string;
        FractionalSecond2 : string;
        FractionalSecond3 : string;
        TimeZone : string;
        UnixTimestamp : string;

        MakeLiteral(literal: string): string;
        ReadEscapedPart(format: string, startIndex: number) : escapedPart;
    }

    export interface escapedPart {
        value: string;
        length: number;
    }

    interface tokenLocateResult {
        nextBegin: number;
        literal: string;
        token: string;
    }

    export function convert(format: string, sourceRules: formatRules, destRules: formatRules) {
        if(sourceRules == destRules)
            return format;

        var result = '';
        var index = 0;
        var destTokens = getTokens(destRules);
        var sourceMap = getTokenMap(getTokens(sourceRules));
        while(index < format.length) {
            var part = locateNextToken(sourceRules, format, index);
            if(part.literal.length > 0)
                result += destRules.MakeLiteral(part.literal);
            if(part.token.length > 0)
                result += destTokens[sourceMap[part.token]];
            index = part.nextBegin;
        }

        return result;
    }

    function locateNextToken(rules: formatRules, format: string, begin: number) {
        var literal = '';
        var index = begin;
        var sequence = getTokenSequence(getTokenMap(getTokens(rules)));
        while(index < format.length) {
            var escaped = rules.ReadEscapedPart(format, index);
            if(escaped.length > 0) {
                literal += escaped.value;
                index += escaped.length;
                continue;
            }

            var token = sequence.first(x => format.indexOf(x, index) == index);
            if(!token) {
                literal += format.charAt(index);
                index++;
                continue;
            }

            return {
                token: token,
                literal: literal,
                nextBegin: index + token.length
            }
        }

        return {
            token: '',
            literal: literal,
            nextBegin: index
        }
    }

    function getTokens(rules: formatRules) {
        return [rules.DayOfMonthShort, rules. DayOfMonthLong, 
                rules.DayOfWeekShort, rules. DayOfWeekLong, 
                rules.DayOfYearShort, rules. DayOfYearLong, 
                rules.MonthOfYearShort, rules. MonthOfYearLong, 
                rules.MonthNameShort, rules. MonthNameLong, 
                rules.YearShort, rules. YearLong, 
                rules.AmPm, 
                rules.Hour24Short, rules. Hour24Long, 
                rules.Hour12Short, rules. Hour12Long, 
                rules.MinuteShort, rules. MinuteLong, 
                rules.SecondShort, rules. SecondLong, 
                rules.FractionalSecond1, rules. FractionalSecond2, rules. FractionalSecond3, 
                rules.TimeZone, 
                rules.UnixTimestamp
            ].map(x => x || '');
    }

    function getTokenMap(tokens: string[]) {
        var map = {};
        for(var i=0; i<tokens.length; i++) {
            var token = tokens[i];
            if(token) {
                map[token] = i;
            }
        }
        return map;
    }

    function getTokenSequence(map: any) {
        var tokens = Object.keys(map);
        tokens.sort((a, b) => b.length - a.length);
        return tokens;
    }

    function indexOfAny(s: string, chars: string) {
        for(var i=0; i<s.length; i++) {
            var c = s.charAt(i);
            for(var j=0; j<chars.length; j++) {
                if(c === chars.charAt(j))
                    return i;
            }
        }
        return -1;
    }

    export var standard : formatRules = {
        DayOfMonthShort : 'd',
        DayOfMonthLong : 'dd',
        DayOfWeekShort : 'ddd',
        DayOfWeekLong : 'dddd',
        DayOfYearShort : 'D',
        DayOfYearLong : 'DD',
        MonthOfYearShort : 'M',
        MonthOfYearLong : 'MM',
        MonthNameShort : 'MMM',
        MonthNameLong : 'MMMM',
        YearShort : 'yy',
        YearLong : 'yyyy',
        AmPm : 'tt',
        Hour24Short : 'H',
        Hour24Long : 'HH',
        Hour12Short : 'h',
        Hour12Long : 'hh',
        MinuteShort : 'm',
        MinuteLong : 'mm',
        SecondShort : 's',
        SecondLong : 'ss',
        FractionalSecond1 : 'f',
        FractionalSecond2 : 'ff',
        FractionalSecond3 : 'fff',
        TimeZone : 'Z',
        UnixTimestamp : 'X',

        MakeLiteral: function(literal: string) {
            var reserved = 'dDMytHhmsfZX';
            if(indexOfAny(literal, reserved) < 0)
                return literal;

            var result = '';
            for(var i=0; i< literal.length; i++) {
                var c = literal.charAt(i);
                if(reserved.contains(c))
                    result += '\\';
                result += c;
            }
            return result;
        },
        ReadEscapedPart: function(format: string, startIndex: number) {
            var result = '';
            var index = startIndex;
            while(index < format.length) {
                var c = format.charAt(index);

                if(c == '\\') {
                    result += index == format.length - 1 ? '\\' : format[++index];
                    index++;
                    continue;
                } 
                break;
            }

            return {
                value: result,
                length: index - startIndex
            }
        },
    }

    export var dotNet : formatRules = {
        DayOfMonthShort : 'd',
        DayOfMonthLong : 'dd',
        DayOfWeekShort : 'ddd',
        DayOfWeekLong : 'dddd',
        DayOfYearShort : null,
        DayOfYearLong : null,
        MonthOfYearShort : 'M',
        MonthOfYearLong : 'MM',
        MonthNameShort : 'MMM',
        MonthNameLong : 'MMMM',
        YearShort : 'yy',
        YearLong : 'yyyy',
        AmPm : 'tt',
        Hour24Short : 'H',
        Hour24Long : 'HH',
        Hour12Short : 'h',
        Hour12Long : 'hh',
        MinuteShort : 'm',
        MinuteLong : 'mm',
        SecondShort : 's',
        SecondLong : 'ss',
        FractionalSecond1 : 'f',
        FractionalSecond2 : 'ff',
        FractionalSecond3 : 'fff',
        TimeZone : 'zzz',
        UnixTimestamp : null,

        MakeLiteral: function(literal: string) {
            var reserved = 'dfFghHKmMstyz\'"';
            if(indexOfAny(literal, reserved) < 0)
                return literal;

            var result = '';
            for(var i=0; i< literal.length; i++) {
                var c = literal.charAt(i);
                if(reserved.contains(c))
                    result += '\\';
                result += c;
            }
            return result;
        },
        ReadEscapedPart: function(format: string, startIndex: number) {
            var result = '';
            var index = startIndex;
            while(index < format.length) {
                var c = format.charAt(index);

                if(c == '\\') {
                    result += index == format.length - 1 ? '\\' : format[++index];
                    index++;
                    continue;
                }

                if(c == '"') {
                    while(++index < format.length) {
                        var cc = format.charAt(index);
                        if(cc == '"')
                            break;

                        if(cc == '\\') {
                            result += index == format.length - 1 ? '\\' : format[++index];
                        } else {
                            result += cc;
                        }
                    }
                    index++;
                    continue;
                }

                if(c == "'") {
                    while(++index < format.length) {
                        var cc = format.charAt(index);
                        if(cc == "'")
                            break;

                        if(cc == '\\') {
                            result += index == format.length - 1 ? '\\' : format[++index];
                        } else {
                            result += cc;
                        }
                    }
                    index++;
                    continue;
                }

                break;
            }

            return {
                value: result,
                length: index - startIndex
            }
        },
    }

    export var momentJs : formatRules = {
        DayOfMonthShort : 'D',
        DayOfMonthLong : 'DD',
        DayOfWeekShort : 'ddd',
        DayOfWeekLong : 'dddd',
        DayOfYearShort : 'DDD',
        DayOfYearLong : 'DDDD',
        MonthOfYearShort : 'M',
        MonthOfYearLong : 'MM',
        MonthNameShort : 'MMM',
        MonthNameLong : 'MMMM',
        YearShort : 'YY',
        YearLong : 'YYYY',
        AmPm : 'A',
        Hour24Short : 'H',
        Hour24Long : 'HH',
        Hour12Short : 'h',
        Hour12Long : 'hh',
        MinuteShort : 'm',
        MinuteLong : 'mm',
        SecondShort : 's',
        SecondLong : 'ss',
        FractionalSecond1 : 'S',
        FractionalSecond2 : 'SS',
        FractionalSecond3 : 'SSS',
        TimeZone : 'Z',
        UnixTimestamp : 'X',

        MakeLiteral: function(literal: string) {
            var reserved = 'MoDdeEwWYgGAaHhmsSzZX';

            literal = literal.replaceAll("[", "(").replaceAll("]", ")");
            if(indexOfAny(literal, reserved) < 0)
                return literal;

            return '[' + literal + ']';
        },
        ReadEscapedPart: function(format: string, startIndex: number) {
            if(format.charAt(startIndex) != '[')
                return {value: '', length: 0};

            var result = '';
            var index = startIndex;
            while(index < format.length) {
                var c = format.charAt(index);

                if(c == ']') {
                    break;
                } 

                result += c;
            }

            return {
                value: result,
                length: index - startIndex
            }
        },
    }

    export var datepicker : formatRules = {
        DayOfMonthShort : 'd',
        DayOfMonthLong : 'dd',
        DayOfWeekShort : 'D',
        DayOfWeekLong : 'DD',
        DayOfYearShort : 'o',
        DayOfYearLong : 'oo',
        MonthOfYearShort : 'm',
        MonthOfYearLong : 'mm',
        MonthNameShort : 'M',
        MonthNameLong : 'MM',
        YearShort : 'y',
        YearLong : 'yy',
        AmPm : null,
        Hour24Short : null,
        Hour24Long : null,
        Hour12Short : null,
        Hour12Long : null,
        MinuteShort : null,
        MinuteLong : null,
        SecondShort : null,
        SecondLong : null,
        FractionalSecond1 : null,
        FractionalSecond2 : null,
        FractionalSecond3 : null,
        TimeZone : null,
        UnixTimestamp : '@',

        MakeLiteral: function(literal: string) {
            var reserved = "dDomMy@'";
            if(indexOfAny(literal, reserved) < 0)
                return literal;

            return "'" + literal.replaceAll("'", "''") + "'";
        },
        ReadEscapedPart: function(format: string, startIndex: number) {
            if(format.charAt(startIndex) != "'")
                return {value: '', length: 0};

            var result = '';
            var index = startIndex;
            while(++index < format.length) {
                var c = format.charAt(index);

                if(c == "'") {
                    index++;
                    if(index == format.length)
                        break;

                    if(format[index] == "'") {
                        result += c;
                    } else {
                        break;
                    }
                } else {
                    result += c;
                }
            }

            return {
                value: result,
                length: index - startIndex
            }
        },
    }

    export var timepicker : formatRules = {
        DayOfMonthShort : null,
        DayOfMonthLong : null,
        DayOfWeekShort : null,
        DayOfWeekLong : null,
        DayOfYearShort : null,
        DayOfYearLong : null,
        MonthOfYearShort : null,
        MonthOfYearLong : null,
        MonthNameShort : null,
        MonthNameLong : null,
        YearShort : null,
        YearLong : null,
        AmPm : 'TT',
        Hour24Short : 'H',
        Hour24Long : 'HH',
        Hour12Short : 'h',
        Hour12Long : 'hh',
        MinuteShort : 'm',
        MinuteLong : 'mm',
        SecondShort : 's',
        SecondLong : 'ss',
        FractionalSecond1 : null,
        FractionalSecond2 : null,
        FractionalSecond3 : 'l',
        TimeZone : 'Z',
        UnixTimestamp : null,

        MakeLiteral: function(literal: string) {
            var reserved = "HhmslctTzZ'";
            if(indexOfAny(literal, reserved) < 0)
                return literal;

            return "'" + literal.replaceAll("'", '"') + "'";
        },
        ReadEscapedPart: function(format: string, startIndex: number) {
            if(format.charAt(startIndex) != "'")
                return {value: '', length: 0};

            var result = '';
            var index = startIndex;
            while(++index < format.length) {
                var c = format.charAt(index);

                if(c == "'") {
                    index++;
                    if(index == format.length)
                        break;

                    if(format.charAt(index) == "'")
                        result += c;
                    else
                        break;
                } else {
                    result += c;
                }
            }

            return {
                value: result,
                length: index - startIndex
            }
        },
    }
}

interface String {
    replaceAll(search: string, replacement: string): string;
    contains(part: string): boolean;
}

interface Array<T> {
    first(callbackfn?: (value: T) => boolean, thisArg?: any): T;
}

JavaScript 版本:

var dateFormat;
(function (dateFormat) {
    function convert(format, sourceRules, destRules) {
        if (sourceRules == destRules)
            return format;

        var result = '';
        var index = 0;
        var destTokens = getTokens(destRules);
        var sourceMap = getTokenMap(getTokens(sourceRules));
        while (index < format.length) {
            var part = locateNextToken(sourceRules, format, index);
            if (part.literal.length > 0)
                result += destRules.MakeLiteral(part.literal);
            if (part.token.length > 0)
                result += destTokens[sourceMap[part.token]];
            index = part.nextBegin;
        }

        return result;
    }
    dateFormat.convert = convert;

    function locateNextToken(rules, format, begin) {
        var literal = '';
        var index = begin;
        var sequence = getTokenSequence(getTokenMap(getTokens(rules)));
        while (index < format.length) {
            var escaped = rules.ReadEscapedPart(format, index);
            if (escaped.length > 0) {
                literal += escaped.value;
                index += escaped.length;
                continue;
            }

            var token = sequence.first(function (x) {
                return format.indexOf(x, index) == index;
            });
            if (!token) {
                literal += format.charAt(index);
                index++;
                continue;
            }

            return {
                token: token,
                literal: literal,
                nextBegin: index + token.length
            };
        }

        return {
            token: '',
            literal: literal,
            nextBegin: index
        };
    }

    function getTokens(rules) {
        return [
            rules.DayOfMonthShort,
            rules.DayOfMonthLong,
            rules.DayOfWeekShort,
            rules.DayOfWeekLong,
            rules.DayOfYearShort,
            rules.DayOfYearLong,
            rules.MonthOfYearShort,
            rules.MonthOfYearLong,
            rules.MonthNameShort,
            rules.MonthNameLong,
            rules.YearShort,
            rules.YearLong,
            rules.AmPm,
            rules.Hour24Short,
            rules.Hour24Long,
            rules.Hour12Short,
            rules.Hour12Long,
            rules.MinuteShort,
            rules.MinuteLong,
            rules.SecondShort,
            rules.SecondLong,
            rules.FractionalSecond1,
            rules.FractionalSecond2,
            rules.FractionalSecond3,
            rules.TimeZone,
            rules.UnixTimestamp
        ].map(function (x) {
            return x || '';
        });
    }

    function getTokenMap(tokens) {
        var map = {};
        for (var i = 0; i < tokens.length; i++) {
            var token = tokens[i];
            if (token) {
                map[token] = i;
            }
        }
        return map;
    }

    function getTokenSequence(map) {
        var tokens = Object.keys(map);
        tokens.sort(function (a, b) {
            return b.length - a.length;
        });
        return tokens;
    }

    function indexOfAny(s, chars) {
        for (var i = 0; i < s.length; i++) {
            var c = s.charAt(i);
            for (var j = 0; j < chars.length; j++) {
                if (c === chars.charAt(j))
                    return i;
            }
        }
        return -1;
    }

    dateFormat.standard = {
        DayOfMonthShort: 'd',
        DayOfMonthLong: 'dd',
        DayOfWeekShort: 'ddd',
        DayOfWeekLong: 'dddd',
        DayOfYearShort: 'D',
        DayOfYearLong: 'DD',
        MonthOfYearShort: 'M',
        MonthOfYearLong: 'MM',
        MonthNameShort: 'MMM',
        MonthNameLong: 'MMMM',
        YearShort: 'yy',
        YearLong: 'yyyy',
        AmPm: 'tt',
        Hour24Short: 'H',
        Hour24Long: 'HH',
        Hour12Short: 'h',
        Hour12Long: 'hh',
        MinuteShort: 'm',
        MinuteLong: 'mm',
        SecondShort: 's',
        SecondLong: 'ss',
        FractionalSecond1: 'f',
        FractionalSecond2: 'ff',
        FractionalSecond3: 'fff',
        TimeZone: 'Z',
        UnixTimestamp: 'X',
        MakeLiteral: function (literal) {
            var reserved = 'dDMytHhmsfZX';
            if (indexOfAny(literal, reserved) < 0)
                return literal;

            var result = '';
            for (var i = 0; i < literal.length; i++) {
                var c = literal.charAt(i);
                if (reserved.contains(c))
                    result += '\\';
                result += c;
            }
            return result;
        },
        ReadEscapedPart: function (format, startIndex) {
            var result = '';
            var index = startIndex;
            while (index < format.length) {
                var c = format.charAt(index);

                if (c == '\\') {
                    result += index == format.length - 1 ? '\\' : format[++index];
                    index++;
                    continue;
                }
                break;
            }

            return {
                value: result,
                length: index - startIndex
            };
        }
    };

    dateFormat.dotNet = {
        DayOfMonthShort: 'd',
        DayOfMonthLong: 'dd',
        DayOfWeekShort: 'ddd',
        DayOfWeekLong: 'dddd',
        DayOfYearShort: null,
        DayOfYearLong: null,
        MonthOfYearShort: 'M',
        MonthOfYearLong: 'MM',
        MonthNameShort: 'MMM',
        MonthNameLong: 'MMMM',
        YearShort: 'yy',
        YearLong: 'yyyy',
        AmPm: 'tt',
        Hour24Short: 'H',
        Hour24Long: 'HH',
        Hour12Short: 'h',
        Hour12Long: 'hh',
        MinuteShort: 'm',
        MinuteLong: 'mm',
        SecondShort: 's',
        SecondLong: 'ss',
        FractionalSecond1: 'f',
        FractionalSecond2: 'ff',
        FractionalSecond3: 'fff',
        TimeZone: 'zzz',
        UnixTimestamp: null,
        MakeLiteral: function (literal) {
            var reserved = 'dfFghHKmMstyz\'"';
            if (indexOfAny(literal, reserved) < 0)
                return literal;

            var result = '';
            for (var i = 0; i < literal.length; i++) {
                var c = literal.charAt(i);
                if (reserved.contains(c))
                    result += '\\';
                result += c;
            }
            return result;
        },
        ReadEscapedPart: function (format, startIndex) {
            var result = '';
            var index = startIndex;
            while (index < format.length) {
                var c = format.charAt(index);

                if (c == '\\') {
                    result += index == format.length - 1 ? '\\' : format[++index];
                    index++;
                    continue;
                }

                if (c == '"') {
                    while (++index < format.length) {
                        var cc = format.charAt(index);
                        if (cc == '"')
                            break;

                        if (cc == '\\') {
                            result += index == format.length - 1 ? '\\' : format[++index];
                        } else {
                            result += cc;
                        }
                    }
                    index++;
                    continue;
                }

                if (c == "'") {
                    while (++index < format.length) {
                        var cc = format.charAt(index);
                        if (cc == "'")
                            break;

                        if (cc == '\\') {
                            result += index == format.length - 1 ? '\\' : format[++index];
                        } else {
                            result += cc;
                        }
                    }
                    index++;
                    continue;
                }

                break;
            }

            return {
                value: result,
                length: index - startIndex
            };
        }
    };

    dateFormat.momentJs = {
        DayOfMonthShort: 'D',
        DayOfMonthLong: 'DD',
        DayOfWeekShort: 'ddd',
        DayOfWeekLong: 'dddd',
        DayOfYearShort: 'DDD',
        DayOfYearLong: 'DDDD',
        MonthOfYearShort: 'M',
        MonthOfYearLong: 'MM',
        MonthNameShort: 'MMM',
        MonthNameLong: 'MMMM',
        YearShort: 'YY',
        YearLong: 'YYYY',
        AmPm: 'A',
        Hour24Short: 'H',
        Hour24Long: 'HH',
        Hour12Short: 'h',
        Hour12Long: 'hh',
        MinuteShort: 'm',
        MinuteLong: 'mm',
        SecondShort: 's',
        SecondLong: 'ss',
        FractionalSecond1: 'S',
        FractionalSecond2: 'SS',
        FractionalSecond3: 'SSS',
        TimeZone: 'Z',
        UnixTimestamp: 'X',
        MakeLiteral: function (literal) {
            var reserved = 'MoDdeEwWYgGAaHhmsSzZX';

            literal = literal.replaceAll("[", "(").replaceAll("]", ")");
            if (indexOfAny(literal, reserved) < 0)
                return literal;

            return '[' + literal + ']';
        },
        ReadEscapedPart: function (format, startIndex) {
            if (format.charAt(startIndex) != '[')
                return { value: '', length: 0 };

            var result = '';
            var index = startIndex;
            while (index < format.length) {
                var c = format.charAt(index);

                if (c == ']') {
                    break;
                }

                result += c;
            }

            return {
                value: result,
                length: index - startIndex
            };
        }
    };

    dateFormat.datepicker = {
        DayOfMonthShort: 'd',
        DayOfMonthLong: 'dd',
        DayOfWeekShort: 'D',
        DayOfWeekLong: 'DD',
        DayOfYearShort: 'o',
        DayOfYearLong: 'oo',
        MonthOfYearShort: 'm',
        MonthOfYearLong: 'mm',
        MonthNameShort: 'M',
        MonthNameLong: 'MM',
        YearShort: 'y',
        YearLong: 'yy',
        AmPm: null,
        Hour24Short: null,
        Hour24Long: null,
        Hour12Short: null,
        Hour12Long: null,
        MinuteShort: null,
        MinuteLong: null,
        SecondShort: null,
        SecondLong: null,
        FractionalSecond1: null,
        FractionalSecond2: null,
        FractionalSecond3: null,
        TimeZone: null,
        UnixTimestamp: '@',
        MakeLiteral: function (literal) {
            var reserved = "dDomMy@'";
            if (indexOfAny(literal, reserved) < 0)
                return literal;

            return "'" + literal.replaceAll("'", "''") + "'";
        },
        ReadEscapedPart: function (format, startIndex) {
            if (format.charAt(startIndex) != "'")
                return { value: '', length: 0 };

            var result = '';
            var index = startIndex;
            while (++index < format.length) {
                var c = format.charAt(index);

                if (c == "'") {
                    index++;
                    if (index == format.length)
                        break;

                    if (format[index] == "'") {
                        result += c;
                    } else {
                        break;
                    }
                } else {
                    result += c;
                }
            }

            return {
                value: result,
                length: index - startIndex
            };
        }
    };

    dateFormat.timepicker = {
        DayOfMonthShort: null,
        DayOfMonthLong: null,
        DayOfWeekShort: null,
        DayOfWeekLong: null,
        DayOfYearShort: null,
        DayOfYearLong: null,
        MonthOfYearShort: null,
        MonthOfYearLong: null,
        MonthNameShort: null,
        MonthNameLong: null,
        YearShort: null,
        YearLong: null,
        AmPm: 'TT',
        Hour24Short: 'H',
        Hour24Long: 'HH',
        Hour12Short: 'h',
        Hour12Long: 'hh',
        MinuteShort: 'm',
        MinuteLong: 'mm',
        SecondShort: 's',
        SecondLong: 'ss',
        FractionalSecond1: null,
        FractionalSecond2: null,
        FractionalSecond3: 'l',
        TimeZone: 'Z',
        UnixTimestamp: null,
        MakeLiteral: function (literal) {
            var reserved = "HhmslctTzZ'";
            if (indexOfAny(literal, reserved) < 0)
                return literal;

            return "'" + literal.replaceAll("'", '"') + "'";
        },
        ReadEscapedPart: function (format, startIndex) {
            if (format.charAt(startIndex) != "'")
                return { value: '', length: 0 };

            var result = '';
            var index = startIndex;
            while (++index < format.length) {
                var c = format.charAt(index);

                if (c == "'") {
                    index++;
                    if (index == format.length)
                        break;

                    if (format.charAt(index) == "'")
                        result += c;
else
                        break;
                } else {
                    result += c;
                }
            }

            return {
                value: result,
                length: index - startIndex
            };
        }
    };
})(dateFormat || (dateFormat = {}));

以下是字符串和数组的一些实用方法:

if (!String.prototype.replaceAll) {
    String.prototype.replaceAll = function (pattern, replacement) {
        return this.split(pattern).join(replacement);
    };
}
if (!String.prototype.contains) {
    String.prototype.contains = function (part) {
        return this.indexOf(part) >= 0;
    };
}
if (!Array.prototype.first) {
    Array.prototype.first = function (callback) {
        if (!callback)
            return this.length ? this[0] : null;

        for (var i = 0; i < this.length; i++) {
            var item = this[i];
            if (callback(item)) {
                return item;
            }
        }

        return null;
    };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 jquery ui datepicker 和 moment.js 使用的日期格式之间进行转换? [关闭] 的相关文章

  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何使用 Angular CLI 在特定文件夹中生成组件?

    我将 Angular 4 与 Angular CLI 结合使用 并且可以使用以下命令创建一个新组件 E HiddenWords gt ng generate component plainsight 但我需要在 plainsight 中生成

随机推荐