验证本文件的两个日期;dd-MMM-yyyy“;javascript格式
我有两个日期验证本文件的两个日期;dd-MMM-yyyy“;javascript格式,javascript,validation,date,Javascript,Validation,Date,我有两个日期2010年8月18日和2010年8月19日。如何确定哪个日期更大?您需要创建一个自定义解析函数来处理所需的格式,并获取要比较的日期对象,例如: function customParse(str) { var months = ['Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'], n = months.length, re = /(\d{2}
2010年8月18日
和2010年8月19日
。如何确定哪个日期更大?您需要创建一个自定义解析函数来处理所需的格式,并获取要比较的日期对象,例如:
function customParse(str) {
var months = ['Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'],
n = months.length, re = /(\d{2})-([a-z]{3})-(\d{4})/i, matches;
while(n--) { months[months[n]]=n; } // map month names to their index :)
matches = str.match(re); // extract date parts from string
return new Date(matches[3], months[matches[2]], matches[1]);
}
customParse("18-Aug-2010");
// "Wed Aug 18 2010 00:00:00"
customParse("19-Aug-2010") > customParse("18-Aug-2010");
// true
首先,“dd-MMM-yyyy”格式不是
Date
构造函数的可接受输入格式(它返回一个“无效日期”对象),因此我们需要自己解析它。让我们编写一个函数,从这种格式的字符串中返回一个Date
对象
function parseMyDate(s) {
var m = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];
var match = s.match(/(\d+)-([^.]+)-(\d+)/);
var date = match[1];
var monthText = match[2];
var year = match[3];
var month = m.indexOf(monthText.toLowerCase());
return new Date(year, month, date);
}
对于给定的格式,您可以手动进行解析,但我建议您使用库解析日期到日期对象,然后进行比较。 看看,太棒了
此外,它是对js实用工具工具箱的一个很好的补充。本机的
日期可以解析“MMM+dd-yyyy”,它给出:
function parseDMY(s){
return new Date(s.replace(/^(\d+)\W+(\w+)\W+/, '$2 $1 '));
}
+parseDMY('19-August-2010') == +new Date(2010, 7, 19) // true
parseDMY('18-Aug-2010') < parseDMY('19-Aug-2010') // true
function parseDMY(s){
返回新日期(s.replace(/^(\d+)\W+(\W+)\W+/,“$2$1”);
}
+parseDMY('2010年8月19日')==新日期(2010年7月19日)//true
parseDMY('2010年8月18日')
更新:IE10、FX30(可能还有更多)将理解“2010年8月18日”,而不使用破折号-镀铬手柄
因此Date.parse(“2010年8月18日”.replace(“/-/g,”)
在这些浏览器(以及更多浏览器)中工作
因此
function compareDates(str1,str2) {
var d1 = Date.parse(str1.replace("/-/g," ")),
d2 = Date.parse(str2.replace("/-/g," "));
return d1<d2;
}
功能比较(str1、str2){
var d1=Date.parse(str1.replace(“/-/g)”),
d2=Date.parse(str2.replace(“/-/g)”);
return d1您的问题可能与此问题重复:此处描述的解决方案应该对您有所帮助。文本语言是否保证为英语?@David无法理解您想说的内容?8月18日是特定于英语的…10月10日是英语,但是印尼语(例如)它将是10 Okt等…MMM描述依赖于语言…除非您保证使用特定语言而不是使用hackish*1
hacks将结果转换为整数,否则您应该使用parseInt(s.match(/(\d+)/g)[1],10)
来获取整数对象。使用OP的格式s.match(/(\d+)/g);
将返回两元素数组,例如“2010年8月12日”。匹配(/(\d+)/g);//[“12”,“2010”]
,您正在访问1
和2
索引。您还需要某种方法将三个字母的月份名称与月份编号进行映射…@Denis在这种情况下,我们甚至不需要将字符串转换为数字,将在内部将每个参数转换为ToNumber
;)@CMS,我已经解决了这两个问题。修复了第一个问题通过删除“全局搜索”标记。通过使用indexOf
进行搜索修复了第二个问题。@Delan,很好,您只需重新调整日期和年份的索引即可(并且您可以毫无问题地删除那些丑陋的*1
):
function compareDates(str1,str2) {
var d1 = Date.parse(str1.replace("/-/g," ")),
d2 = Date.parse(str2.replace("/-/g," "));
return d1<d2;
}