我是GAS的新手(实际上也很新编码) 我得到了一个yyyymmdd格式的日期字符串(例如20140807),我怎么能把它变成日期,以便谷歌应用程序脚本可以识别它,以后我可以做一些计算(主要是与今天比较{{1} })
Google apps脚本无法正确识别以下内容:
var today = new Date();
答案 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)
小心选择正确的时区!在我的例子中它
其他可能的选择
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)