Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 给定特定格式,如何拆分字符串?_Javascript_String Formatting_Date Formatting - Fatal编程技术网

Javascript 给定特定格式,如何拆分字符串?

Javascript 给定特定格式,如何拆分字符串?,javascript,string-formatting,date-formatting,Javascript,String Formatting,Date Formatting,我有一些字符串格式的日期,有时是这样的:05-11-2009 16:59:20,有时是这样的:2013-12-05T22:00:00:00Z,还有一些时间是这样的:2013-12-05T22:00:00.000Z 我编写了一个函数,从这些日期中提取月、日和年,但我希望有一个函数可以用于所有这些日期,并以输入格式传递。 比如: function DateParts(datetime, format) { var matches = datetime.splitByFormat(format

我有一些字符串格式的日期,有时是这样的:
05-11-2009 16:59:20
,有时是这样的:
2013-12-05T22:00:00:00Z
,还有一些时间是这样的:
2013-12-05T22:00:00.000Z

我编写了一个函数,从这些日期中提取月、日和年,但我希望有一个函数可以用于所有这些日期,并以输入格式传递。 比如:

function DateParts(datetime, format) {
    var matches = datetime.splitByFormat(format);

    this.getYear = function () {
       return matches[3];
    };
    this.getMonth = function () {
        return (matches[2] - 1) +"" ;
    };
    this.getDay = function () {
        return matches[1];
    };
    this.getHours = function () {
        return matches[4];
    };
    this.getMinutes = function () {
    return matches[5];
    };
    this.getSeconds = function () {
        return matches[6];
    };
};
其中的格式类似于
“yyyy-mm-dd-hh:mm:ss”
“dd-mm-yyyyth:mm:ss.dddZ”
或其他格式


有没有一种很好的方法来创建splitByFormat函数,而不必删除子字符串?

这个怎么样?还有更好的吗

function DateParts(datetime, format) {

    this.getYear = function () {
        if (format) {
            ind = format.indexOf("yyyy");
            return datetime.substring(ind, ind + 4);
        }
         return "";

    };
    this.getMonth = function () {
        if (format) {
            ind = format.indexOf("mm");
            return datetime.substring(ind, ind + 2);
        }
        return "";            
    };
    this.getDay = function () {
        if (format) {
            ind = format.indexOf("gg");
            return datetime.substring(ind, ind + 2);
       }
       return "";
    };
};

这个怎么样?还有更好的吗

function DateParts(datetime, format) {

    this.getYear = function () {
        if (format) {
            ind = format.indexOf("yyyy");
            return datetime.substring(ind, ind + 4);
        }
         return "";

    };
    this.getMonth = function () {
        if (format) {
            ind = format.indexOf("mm");
            return datetime.substring(ind, ind + 2);
        }
        return "";            
    };
    this.getDay = function () {
        if (format) {
            ind = format.indexOf("gg");
            return datetime.substring(ind, ind + 2);
       }
       return "";
    };
};

一个正则表达式可以找到所有的正则表达式:

(((?<month>\d{2})-(?<day>\d{2})-(?<year>\d{4})\s(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}))|((?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})Z)|(?<year>(\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})\.(?<centisecond>\d{3})Z))
[码码>>(((((?\\d{{{2}{{2}})及(((((((??\\d{{{{{{2}})及<<<<<<<<<码码>>)((((??\d{{{{2}})及(((((((((????\\d{{{{{{{{{{{{{{2}}))的)))))))以下以下以下:(((((((((((((((?????\\\\\\\\\\\\\\d{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{2}}))))))))))))))的)))))及及及及及及及及T(?\d{2}):(?\d{2}):(?\d{2}):(?\d{2})\.(?\d{3})Z) 如果使用此正则表达式字符串,则只需捕获不同的分组:

  • 一天
  • 时辰
  • 分钟
  • 第二
  • 毫秒
  • 厘米秒

一个正则表达式可以找到所有正则表达式:

(((?<month>\d{2})-(?<day>\d{2})-(?<year>\d{4})\s(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}))|((?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})Z)|(?<year>(\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})\.(?<centisecond>\d{3})Z))
[码码>>(((((?\\d{{{2}{{2}})及(((((((??\\d{{{{{{2}})及<<<<<<<<<码码>>)((((??\d{{{{2}})及(((((((((????\\d{{{{{{{{{{{{{{2}}))的)))))))以下以下以下:(((((((((((((((?????\\\\\\\\\\\\\\d{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{2}}))))))))))))))的)))))及及及及及及及及T(?\d{2}):(?\d{2}):(?\d{2}):(?\d{2})\.(?\d{3})Z) 如果使用此正则表达式字符串,则只需捕获不同的分组:

  • 一天
  • 时辰
  • 分钟
  • 第二
  • 毫秒
  • 厘米秒

    • 这个简单的类
      FormatAnalyzer
      可能是一个开始。它起作用了

      FormatAnalyzer f = new FormatAnalyzer("yyyy-mm-dd hh:MM:ss");
      f.getYear("2013-07-11 15:39:00");
      f.getMonth("2013-07-11 15:39:00");
      
      在哪里


      这个简单的类
      FormatAnalyzer
      可能是一个开始。它起作用了

      FormatAnalyzer f = new FormatAnalyzer("yyyy-mm-dd hh:MM:ss");
      f.getYear("2013-07-11 15:39:00");
      f.getMonth("2013-07-11 15:39:00");
      
      在哪里


      有些人为此需要一个可爱的正则表达式:)
      “或其他任何东西”
      编写代码可能有点模糊。这是JavaScript吗?抱歉,添加了JavaScript标记。有些人为此需要一个可爱的正则表达式:)
      “或其他任何东西”
      编写代码可能有点模糊。这是JavaScript吗?抱歉,添加了JavaScript标记。除了最后一部分,您的第二个和第三个变体似乎是相同的,难道您不能将
      \(?\d{3})
      设置为可选的吗?是的,这样会更简单。Thx.除了最后一部分外,您的第二个和第三个变体似乎是相同的,难道您不能将
      \(?\d{3})
      设置为可选的吗?是的,这样会更简单。使用这个类,您只需分析一次格式,然后每次数据分析都会简化为给定格式的子字符串提取。计算速度可能很快,是目前为止最好的解决方案。但是也许你可以在开始的时候把日期和格式一起传递给构造函数……首先:对不起,因为我已经写了Java代码,因为我还没有发现你需要JS。在我看来,您可以为每种格式创建一个FormatAnalyzer实例,一旦实例化,您就可以将该实例与所需的所有日期一起使用。使用该类,您只需分析一次格式,然后每个日期分析就可以简化为给定格式的子字符串提取。计算速度可能很快,是目前为止最好的解决方案。但是也许你可以在开始的时候把日期和格式一起传递给构造函数……首先:对不起,因为我已经写了Java代码,因为我还没有发现你需要JS。在我看来,您可以为每种格式创建一个FormatAnalyzer实例,一旦实例化,您就可以在需要的所有日期中使用该实例。