将无效javascript格式的日期转换为ics标准datetime字段

Converting a date in an invalid javascript format to an ics standard datetime field

本文关键字:ics 标准 datetime 字段 转换 日期 无效 javascript 格式      更新时间:2023-09-26

日期和时间实际上是分开的数据,但我认为结合它们将是理想的解决方案?

未修改的数据如下所示:2014/09/0402:30PM

var aDate = new Date('2014/09/04 02:30PM');
//Invalid date....
console.log(aDate.toString());

需要转换为。ics文件使用的日期,如下所示:

20140904T023000 ->这就是上面的日期将变成的。

我该怎么做?

JSBin你可以测试在…

变化

var aDate = new Date('2014/09/04 02:30PM');

var aDate = new Date('2014/09/04 02:30 pm');

,它应该可以工作。你只需要在PM前加一个空格。这不会给你无效日期错误。然后您可以使用该日期获得ICS格式。

下面是获得ICS格式的逻辑。我知道这样做效率不高,但我尽量让它保持简单。
var pre = 
aDate.getFullYear().toString() +
((aDate.getMonth() + 1)<10? "0" + (aDate.getMonth() + 1).toString():(aDate.getMonth() + 1).toString()) + 
((aDate.getDate() + 1)<10? "0" + aDate.getDate().toString():aDate.getDate().toString());
var post = (aDate.getHours()%12).toString() + aDate.getMinutes().toString() + "00";
console.log(pre + "T" + post);

如果您使用24小时记数法来表示时间,而不是表示AM/PM,您应该能够很好地解析日期。

从Chrome控制台:

(new Date('2014/09/04 02:30PM'));
Invalid Date
(new Date('2014/09/04 14:30'));
Thu Sep 04 2014 14:30:00 GMT+0100 (BST)

有了这个对象,您应该能够使用date原型上的各种getter来构造ICS格式兼容的日期。

没有默认的api来转换为。ics文件格式,但是您可以手动完成。

function toITCFormat(date, time)
{
var timeCont = [],
dateCont = [];
if(time.toLowerCase().indexOf('pm')!=-1)
{
 timeCont = time.toLowerCase().replace('pm',00).split(':');   //assuming from your question seconds is never mentioned but only hh:mm i.e. hours and minutes
timeCont[0] = (parseInt(timeCont[0])+12)%24;
}
else
{
timeCont = time.toLowerCase().replace('am',00).split(':');
}
dateCont = date.split('/');
return dateCont.join('')+'T'+timeCont.join('');
}

var x = toITCFormat('2014/09/04','02:30PM');
console.log(x);// this will output ur .ics format
<<p> JSFiddle例子/em>