【问题标题】:string to date object with arbitrary length format specification in JavaScript?JavaScript中具有任意长度格式规范的字符串到日期对象?
【发布时间】:2021-11-10 06:04:29
【问题描述】:

我有几个日期(字符串)要转换为日期对象。

const parse = (val, fmt) =>
{
    if (!val)
        return;
    const fn = (str, len) => val.substr(fmt.indexOf(str), len);

    return new Date(
        fn('YYYY', 4),
        fn('MM', 2) - 1,
        fn('DD', 2)
    );
};

console.log(parse('05/11/1896', 'DD/MM/YYYY')); // 1896-11-05
console.log(parse('07-12-2000', 'DD-MM-YYYY')); // 2000-12-07
console.log(parse('07:12:2000', 'DD:MM:YYYY')); // 2000-12-07
console.log(parse('2017/06/3', 'YYYY/MM/DD')); // 2017-06-03
console.log(parse('2017-06-15', 'YYYY-MM-DD')); // 2017-06-15
console.log(parse('2015 06 25', 'YYYY MM DD')); // 2015-06-25
但是,我想要一个更短的格式字符串,可能和mdy 一样短。这可以做到吗?

我也想支持没有前导零的月份或天数;所以5/5/2021 而不是05/05/2021

谢谢。

【问题讨论】:

  • "可以这样做吗?" 是的,有很多解析器和格式化程序可供选择。写一个不是特别难,虽然有点乏味。你有编码问题吗?

标签: javascript date datetime type-conversion date-parsing


【解决方案1】:

这是我想出来的。

  • 它用作正则表达式从格式中删除任何字符,然后使每个字符唯一using the method outlined here
  • 然后它根据另一个找到第一个非数字字符的正则表达式拆分输入字符串。
  • 它终于有正确的值发送到 Date 对象。

const parse = (val, fmt) =>
{
    if (!val)
        return;
    fmt = Array.from(new Set(fmt.toLowerCase().replace(/[^dmy]/g, ''))).join('');
    const components = val.split(val.match(/[^0-9]/)[0]);
    let day = 1, month = 0, year, i = -1;
    while (i++ < 3)
        switch (fmt[i])
        {
            case 'd':
                day = components[i];
                break;
            case 'm':
                month = components[i] - 1;
                break;
            case 'y':
                year = components[i];
        }

    return new Date(year, month, day);
};

console.log(parse('05/11/1896', 'DD/MM/YYYY')); // 1896-11-05
console.log(parse('07-12-2000', 'DD-MM-YYYY')); // 2000-12-07
console.log(parse('07:12:2000', 'DD:MM:YYYY')); // 2000-12-07
console.log(parse('2017/6/3', 'YYYY/MM/DD')); // 2017-06-03
console.log(parse('2017-6-15', 'YYYY-MM-DD')); // 2017-06-15
console.log(parse('2015 6 25', 'YYYY MM DD')); // 2015-06-25
console.log(parse('2015 6 25', 'YyYy MM DD')); // 2015-06-25
console.log(parse('2015 6 25', 'Y-M-D')); // 2015-06-25
console.log(parse('2015 6 25', 'YYMD')); // 2015-06-25

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多