【问题标题】:Convert a string (in date format) to datetime using Javascript使用 Javascript 将字符串(日期格式)转换为日期时间
【发布时间】:2014-03-17 03:30:18
【问题描述】:

在 BIRT 中,我有一列包含存储为字符串的日期时间。我需要将这些字符串转换为日期时间格式,并使用 Javascript 将结果放在另一列中。 该字符串的格式为:例如:Fri 21 Feb 2014, 09:40 AM。

因此,当转换为日期时间格式并导出到 Excel 时,该列应被视为日期。 你们中的任何人都可以帮我做吗?

干杯,

【问题讨论】:

  • 转换后的格式是什么?重新格式化字符串并不难,但您也需要建议重新格式化它的内容。
  • 基本上我希望 2014 年 2 月 21 日星期五 09:40 AM 表现为日期时间而不是字符串。所以日期时间的格式也应该是一样的。
  • 这不是特别有用。 “表现得像一个日期时间”意味着转换为一个 javascript 对象,但似乎你想要一个 Excel 将视为日期和时间的字符串。 Excel 将处理种类繁多的字符串,但以不同且可能令人困惑或不正确的方式处理。可能最好的格式是 ISO 8601 的某个版本,因此 yyyy-mm-dd hh:mm 将是最明确的并产生所需的结果(粘贴到 Excel 中会产生日期和时间)。

标签: javascript datetime birt


【解决方案1】:

其他答案未考虑此问题是在 BIRT 上下文中。

  • 在数据集中创建一个计算列,数据类型为“日期时间”
  • 输入为表达式:

新日期(行[“myDateStringField”]);

其中“myDateStringField”是字符串格式的 DateTime 列。然后在您的报告中使用此计算列而不是字符串列。

就是这样!

【讨论】:

  • 哇。非常感谢。这真的很有帮助。 :-)
  • 我很高兴它有帮助!也许您可以将其设置为有效答案,这对其他想要做同样事情的 birt 开发人员会有所帮助。
  • 完成。非常感谢:)
【解决方案2】:

结帐momentjs!

您可以解析任何格式的时间,例如

moment("12-25-1995", "MM-DD-YYYY");

在您的情况下,您甚至不必指定格式。它会自动识别它。

您可以输出 ISO 格式或将其转换为 Javascript 日期对象。

【讨论】:

    【解决方案3】:

    使用 javascript 非常容易做到这一点。以下代码将以 Excel 可识别为日期的格式生成日期。

    http://jsfiddle.net/bbankes/d7SwQ/

    var dateString = 'Fri 21 Feb 2014, 09:40 AM';
    var date = new Date(dateString);
    var yr = date.getFullYear();
    var mo = date.getMonth() + 1;
    var day = date.getDate();
    
    var hours = date.getHours();
    var hr = hours < 10 ? '0' + hours : hours;
    
    var minutes = date.getMinutes();
    var min = (minutes < 10) ? '0' + minutes : minutes;
    
    var seconds = date.getSeconds();
    var sec = (seconds < 10) ? '0' + seconds : seconds;
    
    var newDateString = yr + '-' + mo  + '-' + day;
    var newTimeString = hr + ':' + min + ':' + sec;
    
    var excelDateString = newDateString + ' ' + newTimeString;
    

    【讨论】:

      【解决方案4】:

      如果您只想将 'Fri 21 Feb 2014, 09:04 AM' 重新格式化为 '2014-02-21 09:04',则可以执行以下操作:

      function stringToTimestamp(s) {
        var t = s.match(/[\d\w]+/g);
        var months = {jan:'01',feb:'02',mar:'03',apr:'04',may:'05',jun:'06',
                      jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'};
        function pad(n){return (n<10?'0':'') + +n;}
        var hrs = t[4] % 12;
        hrs += /pm$/i.test(t[6])? 12 : 0;
      
        return t[3] + '-' + months[t[2].toLowerCase()] + '-' + pad(t[1]) + ' ' +
               pad(hrs) + ':' + pad(t[5]);
      }
      
      console.log(stringToTimestamp('Fri 21 Feb 2014, 09:04 AM')); // 2014-02-21 09:04
      

      【讨论】:

      • 非常感谢 Rob 抽出宝贵时间。 Dom 的回答是我所期待的。但是非常感谢您的帮助:)
      【解决方案5】:

      使用 ISO 格式:YYYY-MM-DDTHH:MM:SS 或 YYYY-MM-DD

      new Date('2011-04-11T11:51:00');
      

      new Date('2011-04-11');
      

      【讨论】:

      • 感谢您的回复。但是我如何在运行时使用它。也就是说,如果我不知道日期时间的确切值,那么脚本应该从列中获取值。
      • 在你的字符串中创建条件。如果格式是 ** YYYY-MM-DDTHH:MM:SS** 则使用第一个 否则如果 YYYY-MM-DD 则使用第二个
      • @Alaeddine — OP 正在尝试将字符串转换为该(或类似)格式。发布一个将 OP 没有的字符串转换为 OP 不想要的对象的答案是没有帮助的。
      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多