2015-06-03 101 views
-1

我使用Date.js解析日期和时间的字符串Date.parse显示错误

var start_time='10-Jun-15 12:00 am'; 
var end_time='10-Jun-15 12:00 pm'; 

当警报

alert(Date.parse(start_time)); 
alert(Date.parse(end_time)); 

第一个显示

Wed Jun 10 2015 12:00:00 GMT+0530 (India Standard Time) 

和第二个显示

null 

如何解决这个.thanks提前

+2

适合我的作品,你确定这是你试过的吗? – Arvind

+0

而不是Date.parse为什么你不尝试'new Date(start_time)' –

+1

是不是应该用引号? – Incognito

回答

0

编辑:

我检查你的日期格式在Chrome和FF。 Firefox不理解这种格式,但在Chrome中它工作正常。

我使用'2015年6月10日中午12:00'格式,它在两种浏览器都能正常工作。

因此,您应该尝试删除破折号并使用全年或使用任何其他日期格式。

日期应该是RFC2822 or ISO 8601日期格式。

+0

随着OP更新他的问题,您的答案变得无效。 – Zee

0

您描述的缺陷也出现在Safari,Firefox和Chrome中。而不是修复库,这是一个简单的函数来解析你的日期格式。 2位数字不是一个好主意,功能将它们视为+2000。三位和四位数年份按原样处理。

// Parse date format dd-mmm-yy hh:mm ap 
// Two digit years are treated as 2000 
// Years of three digits or more are treated as is 
function parseDmY(s) { 
    var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5, 
       jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}; 
    var b = s.split(/[- :]/); 
    var h = (b[3]%12) + (/pm/i.test(b[5])? 12 : 0); 
    var y = +b[2] + (b[2] < 100? 2000 : 0) 
    return new Date(y, months[b[1].toLowerCase()], b[0], h, b[4]); 
} 

console.log(parseDmY('10-Jun-2015 12:00 pm')); 

两位数的年份也可以在当前年份的-70到+30的范围内进行处理。

0

如果您的日期字符串始终以该格式提供,则使用Date.parseExact将解决问题...并且比使用Date.parse更有效。

var start_time='10-Jun-15 12:00 am'; 
var end_time='10-Jun-15 12:00 pm'; 

alert(Date.parseExact(start_time, 'dd-MMM-yy hh:mm tt')); 
alert(Date.parseExact(end_time, 'dd-MMM-yy hh:mm tt')); 

希望这有助于。