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

mmvthczy  于 2023-02-10  发布在  Go
关注(0)|答案(4)|浏览(200)

有人知道如何使用Excel/Google工作表函数将波斯日期转换为公历日期吗?例如:

1401/06/06

致:

2022/08/28

P. S:之前我发现了一个由Amir Fo编写的将公历转换为Jalali的函数,但我的问题是关于从波斯语(Shamsi)转换为公历。

tkqqtvp1

tkqqtvp11#

这也可以使用Windows Excel 2010+和Excel 365(Windows或Mac)中提供的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")
    • 这与区域设置为波斯语的Changed Type相同 *

flvtvl50

flvtvl502#

尝试:

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

反向:

将谷歌工作表中的日期区域设置从公历转换为Jalali日历

d4so4syb

d4so4syb3#

这是一个纯Excel解决方案,不需要互联网连接或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")
m0rkklqb

m0rkklqb4#

Microsoft Excel支持所有日历转换,关键是要一步一步来。
假设我们要将单元格A1 = 10/10/1401从波斯历转换为英国历,并在单元格B1中设置结果

    • 步骤1:**

categoryNumber选项卡中右键单击B1Format cells...,选择Date并将其更改为所需的日历类型,在本例中为English。对于B1,还应键入公式=A1

    • 步骤2:**

右键单击categoryNumber选项卡中的A1Format cells...,选择Date,然后将日历类型更改为您的日期类型;在这种情况下为Persian
勾选复选标记input dates according to selected calendar

    • 步骤3:**

在单元格A1中输入波斯日期。您将在单元格B1中得到转换日期。

  • 请注意输入yearmonthday的顺序。*

相关问题