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

将无效javascript格式的日期转换为ics标准日期时间字段,javascript,date,datetime,calendar,icalendar,Javascript,Date,Datetime,Calendar,Icalendar,在我的数据中,日期和时间实际上是分开的,但是我认为将它们结合起来是理想的解决方案 未更改的数据如下所示: 2014/09/04和02:30PM var aDate = new Date('2014/09/04 02:30PM'); //Invalid date.... console.log(aDate.toString()); 需要转换为.ics文件使用的日期,如下所示: 20140904T023000-->这就是上述日期的变化 我该怎么做 如果使用24小时表示时间,而不是表示上午/下午,则

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

未更改的数据如下所示:
2014/09/04
02:30PM

var aDate = new Date('2014/09/04 02:30PM');
//Invalid date....
console.log(aDate.toString());
需要转换为.ics文件使用的日期,如下所示:

20140904T023000
-->这就是上述日期的变化

我该怎么做


如果使用24小时表示时间,而不是表示上午/下午,则应该能够很好地解析日期

从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)

使用此对象,您应该能够使用日期原型上的各种getter来构造所需的符合ICS格式的日期。

如果您使用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)
使用此对象,您应该能够使用日期原型上的各种getter来构造所需的符合ICS格式的日期。

更改

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

它应该会起作用。你只需要在下午三点之前放一个地方。这不会给您提供无效的日期错误。然后您可以使用该日期获取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);
var-pre=
aDate.getFullYear().toString()+
((aDate.getMonth()+1)变化

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

它应该是有效的。你只需要在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);
var-pre=
aDate.getFullYear().toString()+

((aDate.getMonth()+1)没有可转换为.ics文件格式的默认api,但是您可以手动执行

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

没有可转换为.ics文件格式的默认api,但您可以手动执行

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

谢谢,这是我想要的。为了添加到你的答案,我在你的答案中链接到了一个JSFIDLE。谢谢,这是我想要的。为了添加到你的答案,我在你的答案中链接到了一个JSFIDLE。一旦你将它转换为日期,这是一个简单的逻辑。我对你的代码进行了编辑。你使用了
getDay()
当你打算使用
getDate()
时,我被弄糊涂了:)还有,你为什么要使用
%12
这似乎也不正确。getHours返回24小时表示法的小时数(在chrome中),我以为你想要下午2:30表示为230,而不是1430。你可以解决这个问题。getDay是打字错误,顺便说一句,getDate和getDay在示例的日期中都返回4,对此表示抱歉。是的,我开始使用12小时符号,但是ical格式需要24小时格式。一旦你将其转换为日期,这是一个简单的逻辑。我在你的c上进行了编辑ode.当您打算使用
getDay()
时,您使用了
getDay()
。这让我感到困惑:)还有,您为什么要这样做
%12
这似乎也是不正确的。getHours返回24小时表示法的小时数(在chrome中),我以为您希望下午2:30表示为230,而不是1430。你可以解决这个问题。getDay输入错误顺便说一句,getDate和getDay在示例的日期中都返回4,很抱歉,是的,我以12小时表示法开始,但是ical格式需要24小时格式。