【问题标题】:Converting a date in an invalid javascript format to an ics standard datetime field将无效 javascript 格式的日期转换为 ics 标准日期时间字段
【发布时间】:2014-08-19 17:25:17
【问题描述】:

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

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

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

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

20140904T023000 --> 上面的日期会变成这样。

我该怎么做?

JSBin you could test in...

【问题讨论】:

    标签: javascript date datetime calendar icalendar


    【解决方案1】:

    改变

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

    【讨论】:

    • 一旦你把它转换成日期,这是一个简单的逻辑
    • 嘿,我对您的代码进行了编辑。当您打算使用 getDate() 时,您使用了 getDay()。让我感到困惑:)
    • 还有你为什么要这样做%12 这似乎也使它不正确。
    • getHours 以 24 小时表示法返回小时数(在 chrome 中),我以为您希望下午 2:30 表示为 230 而不是 1430。您可以解决这个问题。 getDay 是错字 btw getDate 和 getDay 在您的示例日期中都返回 4,对此感到抱歉
    • 是的,我以 12 小时表示法开始,但是 ical 格式需要 24 小时格式。
    【解决方案2】:

    如果您使用 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 格式兼容的日期。

    【讨论】:

      【解决方案3】:

      没有默认的 api`s 可以转换为 .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
      

      JSFiddle Example

      【讨论】:

      • 谢谢,这就是我想要的。只是为了添加到您的答案中,我在您的答案中链接到了一个 jsfiddle。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      相关资源
      最近更新 更多