【问题标题】:How to fix this date type validation error?如何修复此日期类型验证错误?
【发布时间】:2014-03-15 18:46:41
【问题描述】:

我有这个功能:

function replaceKeys(documentClass, headersArr, personDataArr){
 for(var i = 0; i<headersArr.length; i++){
  var key = ":" + headersArr[i] + ":";
  var newString = personDataArr[i];
   Logger.log("newString ="+newString);
   Logger.log("(newString instanceof Date) ="+(newString instanceof Date));   
   Logger.log("typeof  newString ="+ ( typeof newString));
   if(newString instanceof Date) {
       newString = newString.getDate() + '/' + (newString.getMonth() + 1) + '/' + newString.getFullYear();
     Logger.log("newString after if = "+newString);
      }     
  replaceString(documentClass, key, newString);
   Logger.log(" ");
  }
}

这不起作用,因为日期存储为字符串,如此日志中所示:

数据存储在谷歌电子表格中。然后,字符串化并存储在 ScriptProperties 中(仅接受字符串),然后恢复为字符串数组。

我尝试过这样的操作:if(new Date (newString) instanceof Date),但是当字符串不能转换为日期格式时出现错误。

我如何设置条件来尝试某些事情,当我通过条件时,我可以执行以下操作:

或者其他解决方法?

【问题讨论】:

  • 数据在哪里生成,如果是本地的,那么您不能存储日期对象而不是将其转换为 ISO8601 字符串吗?否则你需要从字符串中创建一个 Date 对象,这并不难。
  • 数据存储在谷歌电子表格中。然后,字符串化并存储在 scriptproperties 中(仅接受字符串),之后恢复为字符串数组。
  • 好的,如果您需要的话,您只需要将字符串转换为 Date 对象。将字符串拆分为多个部分并将它们传递给 Date 构造函数,并使用 Date.UTC 作为您的字符串在 UTC Z
  • 但是很多数组对象不是日期(例如:姓名等)
  • 但是你知道哪些字段是什么,不是吗?

标签: javascript date datetime google-apps-script


【解决方案1】:

根据您提供的信息。

Javascript

function parseMyDate(dateString) {
    var parts = dateString.slice(0, -1).split(/[T\-:\.]/g);

    parts[1] -= 1;
    return new Date(Date.UTC.apply(undefined, parts));
}

var dateString = '2014-01-21T13:50:20.123Z';

var myDate = parseMyDate(dateString);

console.log(!isNaN(myDate), myDate instanceof Date);

开启jsFiddle

【讨论】:

    【解决方案2】:

    虽然其他答案有效,但它们使事情变得过于复杂。 不要将日期来回转换为字符串。 而是将其保存为整数 (date.getTime()),可以将其保存到属性中(作为字符串),并将字符串解析回数字然后简单地 Date(num) 为您提供确切的日期。

    【讨论】:

      【解决方案3】:

      我找到了其他解决方案:在将日期对象存储到 ScriptProperties 之前将其转换为字符串:

      function stringifyDates(array){
         for(var i = 0; i<array.length; i++){
            var newString = array[i];
            if(newString instanceof Date){
              newString = newString.getDate() + '/' + (newString.getMonth() + 1) + '/' + newString.getFullYear();
              array[i] = newString;
           }
        }
        return array
      }
      

      【讨论】:

      • 您也可以使用 JSON.stringify 使其成为字符串,然后使用 JSON.parse 来恢复您的日期对象。
      猜你喜欢
      • 2019-09-07
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多