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实例,一旦实例化,您就可以在需要的所有日期中使用该实例。