如何根据时间有条件地更改日期?时区差异?
How to conditionally change a date based on a time? Time zone differences?
我正在使用两个函数从字符串中提取日期和时间:
DATA 中的原始字符串!A2:
2022-03-06T04:52:33.813Z
=LEFT(DATA!$A,FIND("T",DATA!$A)-1)
将字符串重新格式化为日期:
结果:
2022-03-06
在另一个单元格中,我正在提取时间并将其转换为美国 CT 时间:
=MID(DATA!$A,12,5)-"6:00"
结果: 10:52 PM
问题:
我已成功减去 6 小时以将此时间转换为 CT,但现在只要时间在 CT 下午 6 点或之后,日期 (2022-03-06) 就会提前到第二天。在上面的示例中,因为 10:52 PM 是在下午 6 点之后,所以日期应该显示为 2022-03-05。
有什么方法可以检查时间是否在下午 6 点之后,如果是,则将日期更正 -1 天?
非常感谢对此的任何帮助。
谢谢!
由于 Google Sheets 无法将原始字符串识别为日期,因此最好的选择实际上是创建一个将字符串转换为日期的自定义函数。这样就可以更容易的进行你想要的日期操作了。
为此,您必须转至 Extensions > Apps Script 并将以下代码用于来自 :
/**
* Converts a string to a date-time value
* @customfunction
*/
function DATETIME(dateTimeString) {
var output = new Date (dateTimeString);
if(!isNaN(output.valueOf())) {
return output;
} else {
throw new Error('Not a valid date-time');
}
}
保存项目,运行它,授权脚本和return到sheet。
之后,在您的 sheet 中调用 DATETIME
函数,就像您对现有的表格函数所做的那样,并使用 TIME
函数减去小时数:
=(DATETIME(A2)-TIME(7,0,0))
假设您的 sheet 看起来像这样,结果列将像这样:
如果您还想将日期与时间分开,则必须再添加两个公式(假设 D1
包含 DATETIME
自定义函数的结果):
- 检索日期:
=LEFT(D1,FIND(" ",D1)-1)
- 检索时间:
=RIGHT(D1,LEN(D1)-FIND(" ",D1))
完成所有公式后,sheet 将如下所示:
参考
A-
尝试,不使用任何脚本
=value(left(A1,10))+value(mid(A1,12,12))
B-
如果你想减去 6 小时,试试
=value(left(A1,10))+value(mid(A1,12,12))-6/24
你会更改日期
C-
但是,要解决这个问题I have successfully subtracted 6 hours to convert this time to CT, but now whenever the time is on or after 6 PM CT, the date (2022-03-06) prematurely advances to the next day.
1- 检查电子表格的时区
2- 以及您的脚本编辑器的时区。
要在脚本编辑器中执行此操作,请检查参数
- 点击左边的齿轮)勾选第三个参数
- 返回脚本
- 修改
appscript.json
中的时区并确保它与您的电子表格相同(例如 Europe/paris
)
我正在使用两个函数从字符串中提取日期和时间:
DATA 中的原始字符串!A2: 2022-03-06T04:52:33.813Z
=LEFT(DATA!$A,FIND("T",DATA!$A)-1)
将字符串重新格式化为日期:
结果: 2022-03-06
在另一个单元格中,我正在提取时间并将其转换为美国 CT 时间:
=MID(DATA!$A,12,5)-"6:00"
结果: 10:52 PM
问题:
我已成功减去 6 小时以将此时间转换为 CT,但现在只要时间在 CT 下午 6 点或之后,日期 (2022-03-06) 就会提前到第二天。在上面的示例中,因为 10:52 PM 是在下午 6 点之后,所以日期应该显示为 2022-03-05。
有什么方法可以检查时间是否在下午 6 点之后,如果是,则将日期更正 -1 天?
非常感谢对此的任何帮助。
谢谢!
由于 Google Sheets 无法将原始字符串识别为日期,因此最好的选择实际上是创建一个将字符串转换为日期的自定义函数。这样就可以更容易的进行你想要的日期操作了。
为此,您必须转至 Extensions > Apps Script 并将以下代码用于来自
/**
* Converts a string to a date-time value
* @customfunction
*/
function DATETIME(dateTimeString) {
var output = new Date (dateTimeString);
if(!isNaN(output.valueOf())) {
return output;
} else {
throw new Error('Not a valid date-time');
}
}
保存项目,运行它,授权脚本和return到sheet。
之后,在您的 sheet 中调用 DATETIME
函数,就像您对现有的表格函数所做的那样,并使用 TIME
函数减去小时数:
=(DATETIME(A2)-TIME(7,0,0))
假设您的 sheet 看起来像这样,结果列将像这样:
如果您还想将日期与时间分开,则必须再添加两个公式(假设 D1
包含 DATETIME
自定义函数的结果):
- 检索日期:
=LEFT(D1,FIND(" ",D1)-1)
- 检索时间:
=RIGHT(D1,LEN(D1)-FIND(" ",D1))
完成所有公式后,sheet 将如下所示:
参考
A-
尝试,不使用任何脚本
=value(left(A1,10))+value(mid(A1,12,12))
B-
如果你想减去 6 小时,试试
=value(left(A1,10))+value(mid(A1,12,12))-6/24
你会更改日期
C-
但是,要解决这个问题I have successfully subtracted 6 hours to convert this time to CT, but now whenever the time is on or after 6 PM CT, the date (2022-03-06) prematurely advances to the next day.
1- 检查电子表格的时区
2- 以及您的脚本编辑器的时区。
要在脚本编辑器中执行此操作,请检查参数
- 点击左边的齿轮)勾选第三个参数
- 返回脚本
- 修改
appscript.json
中的时区并确保它与您的电子表格相同(例如Europe/paris
)