0

在我的网络应用程序中,用户需要填写日期和时间等字段。在日期中,他们可以输入以下格式的日期:d/m/yy 或 dd/mm/yy(不幸的是,我无法控制用户输入的准确方式)

他们还可以从下拉列表中选择时间:08:00am、8.30am、09:00am、....、05:00 pm

现在,我正在尝试使用下面的函数将时间和日期字符串转换为有效的日期对象,但我得到了“Date isInvalid Date”输出。我应该如何进行?

  var timeStartString ="1970/01/01 "+ "10:00am";
  var st1 =createDate("1/12/2013",timeStartString); 
  Logger.log("Date is"+st1);

 function createDate(dateString,timeString)
    {
      var eventDate  = new Date(dateString);
      var eventTime  = new Date(timeString)

      message +="Date String:"+dateString + " timeString "+timeString;

      eventTime.setFullYear(eventDate.getFullYear());
      eventTime.setDate(eventDate.getDate());
      eventTime.setMonth(eventDate.getMonth()); 

      return eventTime;
    }
4

2 回答 2

4

您可能想考虑使用Moment.js库,它使 JavaScript 中的日期解析和操作更容易一些。有关如何在 Apps 脚本中使用它的更多信息,请点击此处。如果日期格式一致,则可以使用自定义格式字符串对其进行解析。

var date = moment('1970/01/01 10:00am', 'YYYY/MM/DD HH:mma').toDate();
于 2013-07-18T15:34:44.230 回答
0

如果 am 或 pm 直接附加到时间,则 Date 类将无法识别时间。例如new Date("1/12/2013 10:00am")将返回Invalid Date,而new Date("1/12/2013 10:00 am")将返回Sat Jan 12 2013 22:00:00。这是一个微妙的区别,但这就是构建解析器的方式。createDate如果将日期与格式正确的时间字符串连接起来,则根本不需要该方法。

于 2013-07-17T21:51:32.950 回答