在google apps脚本中将字符串转换为日期

时间:2014-08-07 04:36:18

标签: google-apps-script

我是GAS的新手(实际上也很新编码) 我得到了一个yyyymmdd格式的日期字符串(例如20140807),我怎么能把它变成日期,以便谷歌应用程序脚本可以识别它,以后我可以做一些计算(主要是与今天比较{{1} })

Google apps脚本无法正确识别以下内容:

var today = new Date();

5 个答案:

答案 0 :(得分:7)

唯一的方法 - 手工解析字符串

var dateStr = "20140807"

var year = +dateStr.substring(0, 4)
var month = +dateStr.substring(4, 6)
var day = +dateStr.substring(6, 8)

var pubdate = new Date(year, month - 1, day)

month - 1的原因是月份数字从0开始

函数前的+符号只是将函数返回的字符串转换为数字,因此我们可以将它们直接传递给new Date()

答案 1 :(得分:4)

您可以使用moment.js来解析GAS中的日期字符串。

首先,您需要将moment.js添加到您的GAS中。 在脚本编辑器中,转到"资源"然后"库...",然后将此项目键MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48并单击"添加"。从下拉列表中选择版本,然后点击"保存"。

用时刻解析日期就像这样容易。

var momentDate = Moment.moment("20140807", "YYYY/MM/DD");

这里返回的是一个时刻对象,它是JavaScript本机Date对象的包装器,非常便于日期操作。

但是,如果你仍然需要获得JavaScript的Date对象,你可以这样得到它;

var date = momentDate.toDate();

您还可以使用moment.js创建格式化的日期时间字符串。 Here是令牌指定格式的参考。

答案 2 :(得分:0)

Thnx对Vyacheslav Pukhanov,我可以在评论中解决我的问题并回答Code Guy的问题。请注意,vars的名字是荷兰语;)

function DatumStringNaarDatumWaarde(datumString){   
/* @param datumString: can be passed in by another function in your code
   If not provided, this function uses an example as returned by a stockQuoting RESTserver:
*/
 if(!datumString) datumString = "2017-04-25T09:10:00.000000000Z";   
 //--- parsing the string; datevalues   
 var splits      = datumString.split("T")
 var datumSplits = splits[0].split("-")
 var dd   = Number(datumSplits[2]);
 var MM   = Number(datumSplits[1])-1;
 var yyyy = Number(datumSplits[0]);   
 //---parsing the string; time values
 var tijd      = splits[1].split(":00.000000000Z")
 var minuutUur = tijd[0].split(":")
 var uur    = Number(minuutUur[0]);
 var minuut = Number(minuutUur[1]);
 //--- constructing dateValue, with possibilty to be formatted by Utilties             
 var datumWaarde = new Date(yyyy,MM,dd,uur,minuut);
 var werkDatum = Utilities.formatDate(new Date(datumWaarde), "GMT+2", "dd-MM-yyyy HH:mm")
 return(datumWaarde)
 }

答案 3 :(得分:0)

这对我有用。

public class Objects {
    /**
     * Checks whether a value is of type Object
     * @param value the value
     */
    public static isObject = (value: any): boolean => {
        return value === Object(value) && Object.prototype.toString.call(value) !== '[object Array]'
    }

    /**
     * Checks whether a value is of type Array
     * @param value the value
     */
    public static isArray = (value: any): boolean => {
        return Object.prototype.toString.call(value) === '[object Array]' && !Objects.isObject(value)
    }

    /**
     * Check whether two values are equal
     */
    public static isEqual = (objectA: any, objectB: any) => {
        // Objects
        if (Objects.isObject(objectA) && !Objects.isObject(objectB)) {
            return false
        }
        else if (!Objects.isObject(objectA) && Objects.isObject(objectB)) {
            return false
        }
        // Arrays
        else if (Objects.isArray(objectA) && !Objects.isArray(objectB)) {
            return false
        }
        else if (!Objects.isArray(objectA) && Objects.isArray(objectB)) {
            return false
        }
        // Primitives
        else if (!Objects.isArray(objectA) && !Objects.isObject(objectA)) {
            return objectA === objectB
        }
        // Object or array
        else {
            const compareObject = (objectA: any, objectB: any): boolean => {
                if (Object.keys(objectA).length !== Object.keys(objectB).length) return false

                for (const propertyName of Object.keys(objectA)) {
                    const valueA = objectA[propertyName]
                    const valueB = objectB[propertyName]

                    if (!Objects.isEqual(valueA, valueB)) {
                        return false
                    }
                }

                return true
            }
            const compareArray = (arrayA: any[], arrayB: any[]): boolean => {
                if (arrayA.length !== arrayB.length) return false

                for (const index in arrayA) {
                    const valueA = arrayA[index]
                    const valueB = arrayB[index]

                    if (!Objects.isEqual(valueA, valueB)) {
                        return false
                    }
                }

                return true
            }
            if (Objects.isObject(objectA)) {
                return compareObject(objectA, objectB)
            } else {
                return compareArray(objectA, objectB)
            }
        }
    }
}

答案 4 :(得分:0)

小心选择正确的时区!在我的例子中它

  • "+01:00 " => GMT+1 = 柏林(无夏令时)。

其他可能的选择

  • ".000000000Z" = "+00:00" => UTC = GMT = Unix 时间
  • "-05:00" => EST = 纽约/美国
let date = "2021-03-10"
let time = "10:03:00"
let offset_to_utc = "+01:00"
let new_date_object = new Date(date + "T" + time + offset_to_utc)