【问题标题】:How to convert Persian (Shamsi) date to Gregorian (Miladi) date with Function Script in Excel or Google Sheet?如何使用 Excel 或 Google Sheet 中的函数脚本将波斯 (Shamsi) 日期转换为公历 (Miladi) 日期?
【发布时间】: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


【解决方案1】:

尝试:

=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

【讨论】:

【解决方案2】:

这也可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中提供的 Power Query 来完成

使用 Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Rangefrom within sheet
  • 当 PQ 编辑器打开时,在右侧应用步骤下,第二步将是 #"Changed Type"
    • 编辑该步骤以添加 fa-IR 作为文化

        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type date}} , "fa-IR")
      
      • 这与使用波斯语作为区域设置的区域设置更改类型相同

【讨论】:

  • 它不适用于 Google 表格
  • @MahdiOmrani 当然不是。 Power Query 是 Excel 的一项功能。您要求在 Excel 中提供解决方案或者床单。请注意,前面的答案在 Excel 中不起作用。
  • 您没有在 Google 表格中也可以使用的查询吗? @罗恩
  • @MahdiOmrani 如果您需要将其作为表格中的查询进行,我建议您将上一个答案中显示的算法调整为将在表格中运行的脚本。如果您在使用该脚本时遇到困难,请回复或提出新问题。一定要适当地标记它。
【解决方案3】:

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

免责声明:我找到了函数here 并进行了一些修改以使其更具可读性。顺便说一句,我已经在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
)

旧版:

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")

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2019-07-17
    • 2023-02-23
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多