【发布时间】:2022-10-13 17:02:25
【问题描述】:
有谁知道如何将波斯日期转换为公历日期使用Excel / 谷歌表格功能? 例如:
1401/06/06
至:
2022/08/28
P.S:早些时候我发现了一个由Amir Fo编写的将公历转换为Jalali的函数,但我的问题是关于从波斯(Shamsi)转换为公历。
【问题讨论】:
-
答案更新了...
标签: excel function google-sheets excel-formula script
有谁知道如何将波斯日期转换为公历日期使用Excel / 谷歌表格功能? 例如:
1401/06/06
至:
2022/08/28
P.S:早些时候我发现了一个由Amir Fo编写的将公历转换为Jalali的函数,但我的问题是关于从波斯(Shamsi)转换为公历。
【问题讨论】:
标签: excel function google-sheets excel-formula script
尝试:
=TEXT(VLOOKUP("Gregorian calendar", IMPORTHTML("https://date-today.com/en/shamsi-"&
REGEXEXTRACT(TO_TEXT(A1), "/(d+)")*1&"-"&
REGEXEXTRACT(TO_TEXT(A1), "/(d+)/")*1&"-"&
REGEXEXTRACT(TO_TEXT(A1), "d{4}")*1&"-to-gregorian-calendar.html", "table", 1), 2, ),
"e/mm/dd")
或者:
=TEXT(VLOOKUP("Gregorian calendar", IMPORTHTML("https://date-today.com/en/shamsi-"&
REGEXEXTRACT(TO_TEXT(A1), "d+")*1&"-"&
REGEXEXTRACT(TO_TEXT(A1), "/(d+)/")*1&"-"&
REGEXEXTRACT(TO_TEXT(A1), "d{4}")*1&"-to-gregorian-calendar.html", "table", 1), 2, ),
"yyyy/mm/dd")
Convert date locale in google sheet from Gregorian calendar to Jalali calendar
【讨论】:
这也可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中提供的 Power Query 来完成
使用 Power Query
Data => Get&Transform => from Table/Range 或 from within sheet
#"Changed Type"编辑该步骤以添加 fa-IR 作为文化
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type date}} , "fa-IR")
【讨论】:
这是一个纯 Excel 解决方案,不需要 Internet 连接或 Power Query。
免责声明:我找到了函数here 并进行了一些修改以使其更具可读性。顺便说一句,我已经在1396/07/01 到1401/07/01 期间测试了该功能,它工作正常,但使用它进行广泛的测试,风险自负。
基本上,该函数计算自1278/10/11 Shamsi 以来的总天数(等于 Excel 日期原点,1900-01-01)。该函数的结果是一个整数(日期值)。
下面,您将找到两种格式的解决方案,一种使用新的 LET 函数(适用于 Excel 2021 和 Office 365),另一种不使用:
请注意,Shamsi 日期的格式应为1401/07/21。
使用LET:
=LET(
y,VALUE(LEFT(A1,4)),
m,VALUE(MID(A1,6,2)),
d,VALUE(RIGHT(A1,2)),
full_months,IF((m-1)<7,(m-1)*31,IF((m-1)>6,(m-1)*30+6)),
total,(y-1)*365+full_months+d+INT((y-1)/4),
IF(MOD(y,4)=0,total+1,total)-466710
)
旧版:
IF(
MOD(VALUE(LEFT(A1,4)),4)=0,
(VALUE(LEFT(A1,4))-1)*365+(
IF(
(VALUE(MID(A1,6,2))-1)<7,
(VALUE(MID(A1,6,2))-1)*31,
IF(
(VALUE(MID(A1,6,2))-1)>6,
(VALUE(MID(A1,6,2))-1)*30+6
)
)
)+VALUE(RIGHT(A1,2))+INT((VALUE(LEFT(A1,4))-1)/4)+1,
(VALUE(LEFT(A1,4))-1)*365+(
IF(
(VALUE(MID(A1,6,2))-1)<7,
(VALUE(MID(A1,6,2))-1)*31,
IF(
(VALUE(MID(A1,6,2))-1)>6,
(VALUE(MID(A1,6,2))-1)*30+6
)
)
)+VALUE(RIGHT(A1,2))+INT((VALUE(LEFT(A1,4))-1)/4)
)-466710
要将生成的整数转换为日期,请将单元格格式更改为 Date 或使用以下公式:
TEXT(A2,"yyyy-mm-dd")
【讨论】: