Date.parse显示错误

时间:2015-06-03 07:01:49

标签: javascript datejs

我使用Date.js来解析日期和时间字符串

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

如何解决这个问题?。提前谢谢

3 个答案:

答案 0 :(得分:0)

编辑:

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

我使用'2015年6月10日12:00 pm'格式,它在两种浏览器中都运行良好。

所以你应该尝试删除短划线并使用全年或使用任何其他日期格式。

日期应为RFC2822 or ISO 8601日期格式。

答案 1 :(得分: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范围内进行框架处理两位数年份。

答案 2 :(得分: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'));

希望这有帮助。