如何使用非标准日期格式在Javascript中创建新的Date()

Mic*_*hel 16 javascript

我有这种格式的日期:dd.mm.yyyy

当我用它实例化一个JavaScript日期时,它给了我一个 NaN

在c#中我可以指定一个日期格式,说:这里你有我的字符串,它是这种格式,请做一个日期时间.

这在JavaScript中也可能吗?如果没有,有一个简单的方法吗?

我宁愿不使用子字符串表示日期,子字符串表示月份等,因为我的方法还必须能够使用德语,意大利语,英语等日期.

CMS*_*CMS 35

您需要创建一个函数来提取日期部分并将其与Date构造函数一起使用.

请注意,此构造函数将月份视为基于零的数字(0=Jan, 1=Feb, ..., 11=Dec).

例如:

function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // note parts[1]-1
  return new Date(parts[2], parts[1]-1, parts[0]);
}

parseDate('31.05.2010');
// Mon May 31 2010 00:00:00
Run Code Online (Sandbox Code Playgroud)

编辑:为了处理变量格式,您可以执行以下操作:

function parseDate(input, format) {
  format = format || 'yyyy-mm-dd'; // default format
  var parts = input.match(/(\d+)/g), 
      i = 0, fmt = {};
  // extract date-part indexes from the format
  format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; });

  return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]);
}

parseDate('05.31.2010', 'mm.dd.yyyy');
parseDate('31.05.2010', 'dd.mm.yyyy');
parseDate('2010-05-31');
Run Code Online (Sandbox Code Playgroud)

上面的函数接受一个format参数,该参数应该包含yyyy mmdd占位符,分隔符并不重要,因为RegExp只捕获数字.

您还可以看一看DateJS,这是一个让日期解析无痛的小型库......


And*_*y E 10

将字符串拆分为数组并将部分直接传递给Date对象很容易:

var str = "01.01.2010";
var dmy = str.split(".");

var d = new Date(dmy[2], dmy[1] - 1, dmy[0]);
Run Code Online (Sandbox Code Playgroud)

  • Date()的month参数在Zero based index中采用Month.1月= 0,2月= 1,3月= 2 ......等 (3认同)

Ryl*_*ley 8

没有按照您希望的方式操纵日期的内置方法.

jQuery的UI日期选择您想要的功能,我相信很多其他库也有类似的东西.

$.datepicker.parseDate('dd.mm.yy', '31.12.2007');
Run Code Online (Sandbox Code Playgroud)