2017-04-07 50 views
0

我正在使用FullCalendar并需要将当前时间添加到select回调函数中的模糊日期时刻。使用momentjs将模糊日期添加到当前时间

在月视图中选择一天时,回调函数参数“开始”和“结束”返回模糊日期(无时间)的时刻。我用以下为当前时间添加到日期,然后将其转换回了一下,但不知道这是否是做了正确的方法...

if(!start.hasTime()){ 
    start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
} 

正如你所看到的,我将“开始”和“结束”日期和当前时刻转换为字符串,然后将连接的字符串转换为片刻。

我想确保我创建的时刻采用有效的ISO 8601格式。

谢谢, 任何帮助,将不胜感激。

回答

1

official docs中说如果您拨打format()函数,您将获得ISO 8601格式的日期。此外jsfiddle

,如果你不想来处理时区,你可以使用utc()method

0

我有同样的问题,奇怪的是,当我升级到V3.40 fullcalendar: 检查了这一点。根据fullcalendar docs, ,format()toISOString函数已在fullcalendar内被覆盖,用于模糊地计时的时刻仅返回日期,即'2017-03-06'。为了克服这个问题并设定一个时间,你需要创建一个新的时刻对象,这就是你所做的。为了确保跨浏览器的一致性分析,您应该按照moment docs的建议指定您正在解析的格式。因此,对于你的情况,这将是:

if(!start.hasTime()){ 
     var format = 'YYYY-MM-DD HH:mm:ss'; 
     start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
    } 

为了使代码更清洁,简单易读,虽然,你可以创建一个使用UNIX时间戳(这是一个数字,不依赖于字符串格式)的新时刻start时刻和使用时刻set功能设置时间。所以,现在看起来是这样的:

if(!start.hasTime()){ 
     var timestamp = start.valueOf(); 
     var now = moment(); 
     var startMomentWithNowTime = moment(timestamp).set({ 
      'hour': now.hour(), 
      'minute': now.minute(), 
      'second': now.second() 
     }); 
     start = startMomentWithNowTime; 
     end = startMomentWithNowTime; 
    } 

借口描述性的变量命名startMomentWithNowTime。还有几行,但希望更容易阅读。您也可以将此逻辑封装在一个函数中以便按需使用。希望能帮助到你!