Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有条件地将多种格式的日期和日期时间字符串转换为JavaScript日期对象_Javascript_Date_Datetime - Fatal编程技术网

有条件地将多种格式的日期和日期时间字符串转换为JavaScript日期对象

有条件地将多种格式的日期和日期时间字符串转换为JavaScript日期对象,javascript,date,datetime,Javascript,Date,Datetime,通过下面这个小实用程序JavaScript函数,它可以将基本日期字符串转换为JavaScript日期对象 日期字符串可以有如下多种格式 stringToDate("17/9/2014", "dd/MM/yyyy", "/"); stringToDate("9/17/2014", "mm/dd/yyyy", "/"); stringToDate("9-17-2014", "mm-dd-yyyy", "-"); 我希望做的是扩展它,允许有条件的字符串中也有时间09:12:4909:12:49am,

通过下面这个小实用程序JavaScript函数,它可以将基本日期字符串转换为JavaScript日期对象

日期字符串可以有如下多种格式

stringToDate("17/9/2014", "dd/MM/yyyy", "/");
stringToDate("9/17/2014", "mm/dd/yyyy", "/");
stringToDate("9-17-2014", "mm-dd-yyyy", "-");
我希望做的是扩展它,允许有条件的字符串中也有时间
09:12:49
09:12:49am
09:12:49pm

下面的函数用这行创建日期对象

var formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex]);
而是要做一些像

var formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex], hours, minutes, seconds, milliseconds);
仅当在原始字符串中检测到时,才添加
小时、分钟、秒、毫秒

使用此代码是否可以执行此任务

  // Convert Date String into JS Date Object
  // Can parse multiple Date formats
  // stringToDate("17/9/2014", "dd/MM/yyyy", "/");
  // stringToDate("9/17/2014", "mm/dd/yyyy", "/");
  // stringToDate("9-17-2014", "mm-dd-yyyy", "-");
  function stringToDate(d, _format, _delimiter) {
    if((d instanceof Date)){
      return d;
    }
    var formatLowerCase = _format.toLowerCase();
    var formatItems = formatLowerCase.split(_delimiter);
    var dateItems = d.split(_delimiter);
    var monthIndex = formatItems.indexOf("mm");
    var dayIndex = formatItems.indexOf("dd");
    var yearIndex = formatItems.indexOf("yyyy");
    var month = parseInt(dateItems[monthIndex]);
    month -= 1;
    var formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex]);
    return formatedDate;
  }


我知道MomentJS、DateJS、DateJS Evolutioned和SugarJS,但我正在尝试为一个小型实用程序库这样做。

听起来你已经有了答案,你是否尝试应用它来看看会发生什么?一个问题可能是您现在需要处理多个分隔符。您可能还需要自己处理上午/下午。这是可能的-当然,但最终你可能会发现使用瞬间更方便。(尽可能避免使用date.js,或者使用进化的fork)@MattJohnson我意识到“聪明”要做的事情就是简单地使用MomentJS,但是我有一个小的日期库,在我的项目中有一些非常特定的功能,而其他的不容易执行,所以在这种特殊情况下,如果我可以在我的库中添加一些类似的函数,那将非常酷。至于要处理更多的分隔符,我明白了,但我认为假设时间通常在它们之间有
,这可能会对我在这种情况下有所帮助…继续..@MattJohnson…继续。。。。到目前为止,我在StackOverflow JS日期搜索中发现了许多有趣的函数!也许抓取前10个字符并知道这将永远是日期部分也会有所帮助
if(dateStr>10){//假设它有一个时间段来尝试解析)
Ok。祝你好运!但不确定这个问题的答案是什么。:)你的月号转换似乎有点冗长,请考虑:
dateItems[monthIndex]-1
,因为减法将为您将字符串转换为数字,并且您返回的不是格式化的日期,而是日期对象,因此您可能需要更改变量名。:-)