2013-07-17 510 views
0

在我的web应用中,用户需要填写日期和时间等字段。 在日期它们可以以格式输入日期: d/M /日 或 DD/MM/YY (不幸的是我无法控制用户将如何精确地输入)来自字符串的日期格式javascript google apps script

而且他们还可以挑选从下拉列表中选择一个时间: 08:00 am8.30am,09:00 am,....,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; 
    } 

回答

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方法。

4

您可能想使用Moment.js库,这使得JavaScript中日期解析和操作变得更容易一些。有关如何在Apps Script here中使用它的更多信息。如果日期格式一致,那么您可以使用自定义格式字符串来解析它。

var date = moment('1970/01/01 10:00am', 'YYYY/MM/DD HH:mma').toDate();