如何使用 Excel 或 Google Sheet 中的函数脚本将波斯 (Shamsi) 日期转换为公历 (Miladi) 日期?

Mah*_*ani 6 excel function excel-formula google-sheets google-apps-script

有谁知道如何使用Excel/Google Sheet 函数将波斯日期转换为公历日期?例如:

1401/06/06
Run Code Online (Sandbox Code Playgroud)

到:

2022/08/28
Run Code Online (Sandbox Code Playgroud)

PS:早些时候我发现了Amir Fo编写的将公历转换为 Jalali 的函数,但我的问题是关于从波斯语(Shamsi)转换为公历。

pms*_*ani 6

这是一个纯 Excel 解决方案,不需要互联网连接或 Power Query。

免责声明:在这里找到了该函数并进行了一些修改以使其更具可读性。顺便说一句,我已经测试了该功能一段时间1396/07/011401/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
)
Run Code Online (Sandbox Code Playgroud)

旧版本:

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
Run Code Online (Sandbox Code Playgroud)

要将生成的整数转换为日期,请将单元格格式更改为Date或使用以下公式:

TEXT(A2,"yyyy-mm-dd")
Run Code Online (Sandbox Code Playgroud)


pla*_*er0 4

尝试:

=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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者:

=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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


撤销:

将 Google 表中的日期区域设置从公历转换为 Jalali 日历