我使用两个函数从字符串中提取日期和时间:
DATA!A2 中的原始字符串: 2022-03-06T04:52:33.813Z
=LEFT(DATA!$A$2,FIND("T",DATA!$A$2)-1)
将字符串重新格式化为日期:
结果: 2022-03-06
在另一个单元格中,我提取时间并将其转换为美国 CT 时间:
=MID(DATA!$A$2,12,5)-"6:00"
结果: 10:52 PM
问题:
我已成功减去 6 小时,将此时间转换为 CT 时间,但现在每当时间在 CT 下午 6 点或之后,日期 (2022-03-06) 就会提前到第二天。在上面的示例中,因为晚上 10:52 是下午 6 点之后,所以日期应显示 2022-03-05。
有什么方法可以检查时间是否在下午 6 点之后,如果是的话,将日期修正 -1 天?
尝试一下,无需任何脚本
=value(left(A1,10))+value(mid(A1,12,12))
如果你想减去6个小时,试试
=value(left(A1,10))+value(mid(A1,12,12))-6/24
您将更改日期(如果有)
但是,要解决这个问题
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
)由于 Google 表格无法将原始字符串识别为日期,因此最好的选择实际上是创建一个将字符串转换为日期的自定义函数。这样就可以更方便的进行你想要的日期操作了。
为此,您必须转到 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');
}
}
保存项目,运行它,授权脚本并返回到工作表。
然后,在工作表中,像使用现有的 Sheets 函数一样调用
DATETIME
函数,并使用 TIME
函数减去小时数:
=(DATETIME(A2)-TIME(7,0,0))
假设您的工作表如下所示,生成的列将如下所示:
如果您还想将日期与时间分开,则必须再添加两个公式(假设
D1
包含 DATETIME
自定义函数的结果):
=LEFT(D1,FIND(" ",D1)-1)
=RIGHT(D1,LEN(D1)-FIND(" ",D1))
完成所有公式后,工作表将如下所示:
曾尝试让“DATETIME”工作,但没有运气。 还有效吗?