Thuật toán tính âm lịch - Hồ Ngọc Đức

By Trần Tứ Liêm on Thứ Tư, 6 tháng 3, 2024

Blog TTL giới thiệu thuật toán Tính Lịch Vạn Niên - Tính Âm Lịch của Hồ Ngọc Đức. Các thuật toán ở đây được viết bằng ngôn ngữ JavaScript, bài viết theo Blog TTL sẽ giới thiệu các thuật toán này bằng ngôn ngữ VB (Visua Basic) để xây dựng bộ lịch trên file Excel. Thân mời độc giả chờ đọc bài tiếp theo.

Thuật toán tính âm lịch

Hồ Ngọc Đức

TIẾN SỈ HỒ NGỌC ĐỨC


Nguồn từ: https://www.informatik.uni-leipzig.de/~duc/amlich/

DOWNLOAD LỊCH 2024 ÂM DƯƠNG EXCEL - PDF

By Trần Tứ Liêm on Thứ Sáu, 29 tháng 12, 2023

Blog TTL xin chia sẽ cùng các bạn bộ lịch năm 2024 (tên năm âm lịch là Giáp Thìn). File lịch gồm: Lịch vạn niên excel theo tháng, lịch tự động, lịch PDF, file vector corel (*.cdr), file lịch photoshop (*.psd)...

download lịch năm 2024 âm dương

LỊCH VẠN NIÊN TTL-EXCEL

By Trần Tứ Liêm on Thứ Sáu, 9 tháng 12, 2022

Đây là bộ lịch vạn sự soạn thảo công phu, được rất nhiều nhà tuyển trạch sử dụng! Và nó sẽ còn được tiếp tục phát triển. 

TẢI LỊCH VẠN NIÊN BẢN MỚI NHẤT

(có nhiều ứng dụng thiên văn, chạy trên máy tính)
Nhấn  trong các dường link để tải về:


(Đã chỉnh sửa và cập nhật lại ngày 23/6/2016)
Có sự góp ý của rất nhiều người dùng
Bản tiếp theo sẽ có phần an sao tử vi và luận giả lá số thông minh.

Bạn có thể tải thêm:





Bản đồ sao được nhúng vào lịch
Các bạn thân mến! Blog TTL đã giới thiệu thuật toán tính Âm Lịch của Hồ Ngọc Đức bằng ngôn ngữ JavaScript, Đây là thuật toán Thiên văn của quốc tế. Bạn có thể xem bài viết này tại: 

Còn ở bài viết này tôi sẽ giới thiệu cho bạn thuật toán tính âm lịch của Hồ Ngọc Đức bằng ngôn ngữ Viasual Basic do Blog TTL chuyển từ ngôn JavaScript. Và File Excel Lịch Vạn Niên xây dựng từ thật toán trên và các tài liệu xem ngày tháng. Nhưng tôi sẽ giới thiệu về File Lịch Vạn Niên trước, thuật toán giới thiệu sau.
File Lịch Vạn Niên là một chương trình xử lý, tính toán một ngày dương nào đó thành ngày âm lịch và các vạn sự của ngày.

Ví dụ như ngày Dương là ngày 01 tháng 01 năm 2013, thì kết quả cơ bản từ chương trình Lịch Vạn Niên là:
  • Là ngày Hoàng Đạo
  • Ngày thứ 3
  • Ngày theo lịch Julius: 2456294
  • Ngày âm lịch: 20/11/2012 ngày Đinh Mão tháng Nhâm Tý năm Nhâm Thìn
  • Mệnh ngày là Hỏa (lửa trong lò), mệnh tháng là Mộc (gỗ cây dâu), mệnh năm là Thủy (nước giữa dòng)
  • Ngày này đang ở trong tiết Đông Chí (giữa đông - kinh độ mặt trời là 280.43 độ)
  • Từ 23h đến 01h là giờ Canh Tý thần Tư Mệnh quản, giờ này là giờ Hắc Đạo, còn từ 01h đến 03h ....
  • Ngày này thì hướng Hỷ thần là Chính Nam, Tài thần là Chính Tây, Hạc thần là Chính Nam, giờ không vong tại Dậu, Hợi, Giờ tốt: Dần, Mão, Ngọ, Mùi
  •  Các sao tốt chiếu trong ngày này: Nguyện Đức Hợp, Thiên Thành...
  • Các sao xấu chiếu trong ngày này: Thiên Cương, Thiên Lại...
  • Các phần vạn sự A, B,C,D,E,F ...
  • ............................

Ngoài ra còn có thêm 3 phần là: Xem Giờ Sinh, Bát Trạch, Ngày Đặc Biệt Của Bạn:
  • Phần Xem Giờ Sinh được viết theo sách Ngọc Hạp Chánh Tông. Phần này bạn chỉ nên xem cho vui, đừng tin quá.
  • Phần Bát Trạch được xây dựng dựa theo sách Phong Thủy Ứng Dụng. Phần này ứng dụng cho việc bài trí nội thất, ngoại thất.
  • Phần Ngày Đặc Biệt là phần bạn nhập ngày mà bạn cần nhớ của mình vào, Lịch vạn niên khi chỉ tới ngày đó sẽ báo cho bạn. Ví dụ ngày sinh của bạn là 20/10/1984 Âm Lịch thì đến ngày 20/10 âm lịch của các năm sẽ hiện dòng nhắc sinh nhật của bạn.
Tuy nhiên bản Lịch Vạn Niên này chắc chắn không ít thì nhiều có chổ sẽ sai, nếu ai phát hiện lỗi sai sót thì comment dùm nha. Ngoài ra mong bà con bàn luận chi sẽ, góp ý để hoàn thành Lịch Vạn Niên này tốt hơn.

Ghi chú Lịch Vạn Niên này là file Excel có chứa các Macro nên bạn phải đưa chế độ bảo vệ của Excel về mức Low mới xem được.  Phần Bát Trạch, nếu bạn dùng thì phải dùng Excel 2007 trở lên, excel 2003 sẽ bị lỗi. 


TẢI LỊCH VẠN NIÊN MỚI NHẤT




Riêng phần tính giờ nước lên, nước xuống thì mình chưa có thuật toán tính, nên mục này bà con xem thận trọng nha. Ai có thật toán tính giờ con nước thì chỉ mình với.

Các bạn có thể thảm khảo bài viết: Cách Tính Giờ Âm Lịch để hiểu hơn về chương trình này

Còn đây là thuật toán:


Option Explicit ' TRAN TU LIEM
Const PI As Double = 3.14159265358979 ' Atn(1) * 4

Function jdFromDate(ByVal dd As Long, ByVal mm As Long, ByVal yy As Long) As Long
    Dim a As Double, y As Long, M As Long, jd As Long
    a = Fix((14 - mm) / 12)
    y = yy + 4800 - a
    M = mm + 12 * a - 3
    jd = dd + Fix((153 * M + 2) / 5) + 365 * y _
        + Fix(y / 4) - Fix(y / 100) + Fix(y / 400) - 32045
    If jd < 2299161 Then
        jd = dd + Fix((153 * M + 2) / 5) + 365 * y + Fix(y / 4) - 32083
    End If
    jdFromDate = jd
End Function

Function jdToDate(jd)
' doi ngay july thành ngay thuong
Dim a, b, c, d, e, M, Day, Month, Year
If jd > 2299160 Then
    a = jd + 32044
    b = Int((4 * a + 3) / 146097)
    c = a - Int((b * 146097) / 4)
 Else
    b = 0
    c = jd + 32082
End If
d = Int((4 * c + 3) / 1461)
e = c - Int((1461 * d) / 4)
M = Int((5 * e + 2) / 153)
Day = e - Int((153 * M + 2) / 5) + 1
Month = M + 3 - 12 * Int(M / 10)
Year = b * 100 + d - 4800 + Int(M / 10)
jdToDate = DateSerial(Year, Month, Day)

End Function

Function NewMoon(ByVal k As Long) As Double
    Dim T As Double, T2 As Double, T3 As Double, dr As Double
    Dim Jd1 As Double, M As Double, Mpr As Double
    Dim F As Double, C1 As Double, deltat As Double, JdNew As Double
    T = k / 1236.85 ' Time in Julian centuries from 1900 January 0.5
   T2 = T * T
    T3 = T2 * T
    dr = PI / 180
    Jd1 = 2415020.75933 + 29.53058868 * k + 0.0001178 * T2 - 0.000000155 * T3
    Jd1 = Jd1 + 0.00033 * Sin((166.56 + 132.87 * T - 0.009173 * T2) * dr)
    M = 359.2242 + 29.10535608 * k - 0.0000333 * T2 - 0.00000347 * T3
    Mpr = 306.0253 + 385.81691806 * k + 0.0107306 * T2 + 0.00001236 * T3
    F = 21.2964 + 390.67050646 * k - 0.0016528 * T2 - 0.00000239 * T3
    C1 = (0.1734 - 0.000393 * T) * Sin(M * dr) + 0.0021 * Sin(2 * dr * M)
    C1 = C1 - 0.4068 * Sin(Mpr * dr) + 0.0161 * Sin(dr * 2 * Mpr)
    C1 = C1 - 0.0004 * Sin(dr * 3 * Mpr)
    C1 = C1 + 0.0104 * Sin(dr * 2 * F) - 0.0051 * Sin(dr * (M + Mpr))
    C1 = C1 - 0.0074 * Sin(dr * (M - Mpr)) + 0.0004 * Sin(dr * (2 * F + M))
    C1 = C1 - 0.0004 * Sin(dr * (2 * F - M)) - 0.0006 * Sin(dr * (2 * F + Mpr))
    C1 = C1 + 0.001 * Sin(dr * (2 * F - Mpr)) + 0.0005 * Sin(dr * (2 * Mpr + M))
    If (T < -11) Then
        deltat = 0.001 + 0.000839 * T + 0.0002261 * T2 _
                - 0.00000845 * T3 - 0.000000081 * T * T3
    Else
        deltat = -0.000278 + 0.000265 * T + 0.000262 * T2
    End If
    JdNew = Jd1 + C1 - deltat
    NewMoon = JdNew
End Function

Function SunLongitude(ByVal jdn As Double) As Double
    Dim T As Double, T2 As Double, dr As Double, M As Double
    Dim L0 As Double, DL As Double, L As Double
    T = (jdn - 2451545) / 36525
        ' Time in Julian centuries from 2000-01-01 12:00:00 GMT
   T2 = T * T
    dr = PI / 180 ' degree to radian
   M = 357.5291 + 35999.0503 * T - 0.0001559 * T2 - 0.00000048 * T * T2
    L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T2
    DL = (1.9146 - 0.004817 * T - 0.000014 * T2) * Sin(dr * M)
    DL = DL + (0.019993 - 0.000101 * T) * Sin(dr * 2 * M) _
        + 0.00029 * Sin(dr * 3 * M)
    L = L0 + DL ' true longitude, degree
   L = L * dr
    L = L - PI * 2 * (Fix(L / (PI * 2))) ' Normalize to (0, 2*PI)
   SunLongitude = L
End Function

Function getSunLongitude(ByVal dayNumber As Double, ByVal timeZone As Byte) As Long
    getSunLongitude = Fix(SunLongitude(dayNumber - 0.5 - timeZone / 24) / PI * 6)
End Function

Function getNewMoonDay(ByVal k As Long, ByVal timeZone As Long) As Long
    getNewMoonDay = Fix(NewMoon(k) + 0.5 + timeZone / 24)
End Function

Function getLunarMonth11(ByVal yy As Long, ByVal timeZone As Long) As Long
    Dim k As Long, off As Double, nm As Long, sunLong As Double
    off = jdFromDate(31, 12, yy) - 2415021
    k = Fix(off / 29.530588853)
    nm = getNewMoonDay(k, timeZone)
    sunLong = getSunLongitude(nm, timeZone) ' sun longitude at local midnight
   If (sunLong >= 9) Then
        nm = getNewMoonDay(k - 1, timeZone)
    End If
    getLunarMonth11 = nm
End Function


Function getLeapMonthOffset(ByVal a11 As Double, ByVal timeZone As Long) As Long
    Dim k As Long, last As Long, Arc As Long, I As Long
    k = Fix((a11 - 2415021.07699869) / 29.530588853 + 0.5)
    last = 0
    I = 1 ' We start with the month following lunar month 11
   Arc = getSunLongitude(getNewMoonDay(k + I, timeZone), timeZone)
    Do
        last = Arc
        I = I + 1
        Arc = getSunLongitude(getNewMoonDay(k + I, timeZone), timeZone)
    Loop While (Arc <> last And I < 14)
    getLeapMonthOffset = I - 1
End Function


Public Function KinhDoMatTroi(gio, phut, dd, mm, yy)
'tinh kinh ?o mat troi
Dim PI, a, y, M, T, jdn, L0, jd, c, theta, lambda
PI = 4 * Atn(1)
a = Int((14 - mm) / 12)
y = yy + 4800 - a
M = mm + 12 * a - 3
    jdn = dd + Int(((153 * M) + 2) / 5) + 365 * y + Int(y / 4) - Int(y / 100) + Int(y / 400) - 32045
    If jdn < 2299161 Then jdn = dd + Int((153 * M + 2) / 5) + 365 * y + Int(y / 4) - 32083
    jd = jdn + ((gio - 12) / 24) + (phut / 1440) - 7 / 24


T = (jd - 2451545#) / 36525
L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T * T
M = (357.5291 + 35999.0503 * T - 0.0001559 * T * T - 0.00000048 * T * T * T) * PI / 180
c = ((1.9146 - 0.004817 * T - 0.000014 * T * T) * Sin(M)) + (0.01993 - 0.000101 * T) * Sin(2 * M) + 0.00029 * Sin(3 * M)
theta = L0 + c
lambda = theta - 0.00569 - 0.00478 * Sin((125.04 - 1934.136 * T) * PI / 180)
lambda = lambda - 360 * Int(lambda / 360)
KinhDoMatTroi = lambda

End Function













Function convertSolar2Lunar(dd, mm, yy, timeZone)

'Doi ngày duong dd/mm/yyyy ra ngày âm

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
convertSolar2Lunar = lunarDay & "/" & lunarMonth & "/" & lunarYear

End Function

Function THANGNODU(dd, mm, yy, timeZone)

'THANG NO DU

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
THANGNODU = getNewMoonDay(k + 1, timeZone) - getNewMoonDay(k, timeZone)

End Function

Function THANGNHUAN(dd, mm, yy, timeZone)

'THANG NHUAN

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)

    THANGNHUAN = (leapMonthDiff + 10) Mod 12
End If

 


End Function






Function convertLunar2Solar(lunarDay, lunarMonth, lunarYear, lunarLeap, timeZone)

'Doi âm lich ra duong lich

Dim k, a11, b11, off, leapOff, leapMonth, monthStart
If (lunarMonth < 11) Then
    a11 = getLunarMonth11(lunarYear - 1, timeZone)
    b11 = getLunarMonth11(lunarYear, timeZone)
 Else
    a11 = getLunarMonth11(lunarYear, timeZone)
    b11 = getLunarMonth11(lunarYear + 1, timeZone)
End If
off = lunarMonth - 11
If (off < 0) Then off = off + 12

If (b11 - a11 > 365) Then
    leapOff = getLeapMonthOffset(a11, timeZone)
    leapMonth = leapOff - 2
    If (leapMonth < 0) Then leapMonth = leapMonth + 12
 
    If (lunarLeap <> 0 And lunarMonth <> leapMonth) Then
        convertLunar2Solar = Array(0, 0, 0)
    Else
        If (lunarLeap <> 0 Or off >= leapOff) Then off = off + 1
    End If
End If
k = Int(0.5 + (a11 - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + off, timeZone)
convertLunar2Solar = jdToDate(monthStart + lunarDay - 1)

End Function


Function Ngay(dd, mm, yy, timeZone)

'Doi ngày duong dd/mm/yyyy ra ngày âm: Ngay

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
Ngay = lunarDay
End Function
Function Thang(dd, mm, yy, timeZone)

'Doi ngày duong dd/mm/yyyy ra ngày âm: Thang

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
Thang = lunarMonth

End Function

Function Nam(dd, mm, yy, timeZone)

'Doi ngày duong dd/mm/yyyy ra ngày âm

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart > dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
Nam = lunarYear

End Function

Function Duongcongkynhat(dd, mm, yy, timeZone)

'Doi ngày duong dd/mm/yyyy ra ngày âm

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, NgayAm, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart >= dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 
NgayAm = lunarDay & "/" & lunarMonth
Duongcongkynhat = ""

If NgayAm = "13/1" Or NgayAm = "11/2" Or NgayAm = "9/3" Or NgayAm = "7/4" Or NgayAm = "5/5" Or NgayAm = "3/6" Or NgayAm = "8/7" Or NgayAm = "29/7" Or NgayAm = "27/8" Or NgayAm = "25/9" Or NgayAm = "23/10" Or NgayAm = "21/11" Or NgayAm = "19/12" Then Duongcongkynhat = 1

End Function

Function TamNuongSat(dd, mm, yy, timeZone)

'Kiem tra ngay dd/mm/yyyy có phai ngay Tam Nuong Sat

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, TamNuong, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart >= dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 

TamNuongSat = ""

If lunarDay = 2 Or lunarDay = 7 Or lunarDay = 13 Or lunarDay = 18 Or lunarDay = 22 Or lunarDay = 27 Then TamNuongSat = 1

End Function

Function NgayNguyetKy(dd, mm, yy, timeZone)

'Kiem tra ngay dd/mm/yyyy có phai ngay Nguyet Ky

Dim k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, TamNuong, diff, leapMonthDiff
dayNumber = jdFromDate(dd, mm, yy)
k = Int((dayNumber - 2415021.07699869) / 29.530588853)
monthStart = getNewMoonDay(k + 1, timeZone)
If monthStart >= dayNumber Then monthStart = getNewMoonDay(k, timeZone)
a11 = getLunarMonth11(yy, timeZone)
b11 = a11

If a11 >= monthStart Then
    lunarYear = yy
    a11 = getLunarMonth11(yy - 1, timeZone)
 Else
    lunarYear = yy + 1
    b11 = getLunarMonth11(yy + 1, timeZone)
End If
lunarDay = dayNumber - monthStart + 1
diff = Int((monthStart - a11) / 29)
lunarLeap = 0
lunarMonth = diff + 11
If (b11 - a11) > 365 Then
    leapMonthDiff = getLeapMonthOffset(a11, timeZone)
    If diff >= leapMonthDiff Then
        lunarMonth = diff + 10
        If diff = leapMonthDiff Then lunarLeap = 1
    End If
End If
If lunarMonth > 12 Then lunarMonth = lunarMonth - 12

If (lunarMonth >= 11 And diff < 4) Then lunarYear = lunarYear - 1
 

NgayNguyetKy = ""

If lunarDay = 5 Or lunarDay = 14 Or lunarDay = 23 Then NgayNguyetKy = 1

End Function

Thân ái
Blog Trần Tứ Liêm

Giờ Âm Lịch Việt Nam

By Trần Tứ Liêm on Thứ Năm, 6 tháng 10, 2022

Trong cuộc sống có nhiều người không biết hay hỏi nhau là:

Giờ Tý là mấy giờ?
Giờ Ngọ là mấy giờ?
..............................?

Bình thường thì được trả lời là:

Giờ Tý là 23h đến 1h sáng
Giờ Ngọ là lúc 11h đến 13h chiều
...................

Chính những câu hỏi đó mình đã hỏi lúc còn nhỏ, bởi sự tò mò rằng: Tại sao đã có đồng hồ để đo thời gian rồi mà người ta vẫn cứ giờ Tý, Sửu... để làm các việc gì đó.

Đúng rồi bạn ạ! bây giờ người ta vẫn sử dụng 2 loại đơn vị đo thời gian của một ngày đó là:

- Giờ pháp lịch Việt Nam: Sử dụng theo quy chuẩn quốc tế lấy múi giờ là GMT+7, hay còn gọi là giờ Hà Nội. Một ngày có 24h, mỗi giờ là 60h
- Giờ âm lịch: một ngày được chia thành 12 giờ, mỗi giờ lấy tên một con giáp, bắt đầu từ giờ rồi đến Sửu, Dần Mão Thìn Tỵ Ngọ Mùi Thân Dậu Tuất Hợi. Ban đêm được được gọi là Canh. Ví dụ Canh 1, Canh Hai... đến Canh 5

Đi vào vấn đề chính nhé! đó là quy đổi giữa giờ Pháp Lịch và giờ Âm Lịch, hãy giải quyết câu hỏi này trước:

Giờ Ngọ bắt đầu từ mấy giời và kết thúc mấy giờ?

Để nhìn lại bản chất của hai đơn vi đo thời gian ở trên ta có nhận xét như sau:

- Giờ Pháp Lịch lấy mốc thời theo Kinh độ của quả đất là kính tuyến 7, vì vậy có sự liên quan đến vị trí địa lý.
- Giờ âm lịch: ngày trước các bậc tiền nhân xác định bằn giờ chính ngọ là lúc Mặt trời đứng bóng rồi suy ra các giời khác. Như vậy giờ âm lịch có liên quan tới tính thiên văn.

Ngày nay một số chương trình hoặc website cho phép bạn tính toán được giờ mặt trời Mọc, Lặn, đạt tới đỉnh của nó tại mỗi vị trí khác nhau như: Yahoo Weather, Câu Cá...

Ví dụ 1: ngày 01/O1/2O15 tại Đảo Phú Quốc () Mặt Trời mọc 6h21, lặn: 17h53, Chính Ngọ lúc 12h07

Ví dụ 2: ngày 01/O1/2O15 tại TP. HCM () Mặt Trời mọc 6h11, lặn: 17h41, Chính Ngọ lúc 11h56

Như vậy ta suy được bảng giờ âm lịch:

  • - Tại Đảo Phú Quốc: Giờ Tý: 23h07-1h07, Sửu: 1h07-3h07....
  • - Còn tại TPHCM: Giờ Tý: 22h56-0h56, Sửu: 0h56-2h56...


Kết quả cho ta thấy bảng giờ ở hai vị trí khác nhau.

Có vẻ phức tạp phải không bạn?

Vậy phương pháp xác định giờ âm lịch thế nào cho đúng?

CÁCH XÁC ĐỊNH BẢNG GIỜ ÂM LỊCH

CÁCH 1: SỬ DỤNG CHƯƠNG TRÌNH LỊCH VẠN NIÊN EXCEL


Đây là chương trình mình soạn ra, được chạy trên cở sở thuật toán thiên văn, bạn tải về và vào mục cài đặt để sét vị trí Kinh Độ, Vỹ Độ theo hướng dẫn ở trong đó.

Địa chỉ tải: https://trantuliem.blogspot.com/2013/01/lich-van-nien-ttl-excel.html




Chương trình chỉ chạy được trên máy tính và phải có Microffice EXCE.

CÁCH 2: SỬ DỤNG CÁCH TÍNH GIỜ CHÍNH NGỌ HỒ NGỌC ĐỨC


Sử dụng lịch của Hồ Ngọc Đức để xác định giờ Chính Ngọ sau đó bạn phải tự tính ra các giờ khác. Xem theo đường link này:
https://www.informatik.uni-leipzig.de/~duc/amlich/vncal.html (LINK NÀY KHÔNG CÒN HOẠT ĐỘNG)



CÁCH 3: HƯỚNG DẪN BẠN TỰ TÍNH




Cách tính này bắt buộc bạn phải có dữ liệu đầu vào là giờ mặt trời lặn và mặt trời mọc, bạn có thể tìm các dữ liệu này ở nhiều nơi ví dụ:


Trên blog lịch treo tường.

Trên Yahoo thời tiết: https://weather.yahoo.com/

Hoặc bạn gõ tren google với từ khóa: "sunrise and sunset"


Ta tiến hành tìm giờ chính ngọ ngày O1/O1/2O15 tại TP. HCM () từ 2 dữ liệu: Mặt Trời mọc 6h11, lặn: 17h41.


- Mặt trời mọc phú thứ: a = 6x60+11 = 371

- Mặt trời lặn phút thứ: b = 17x60+41 = 1061

- Mặt trời chính ngọ ở phút thứ: c = (a+b):2 = (371+1061):2 = 716

- Đổi kết quả này thành giờ phút: chia c cho 60, phần nguyên là giờ, phân dư là phú:

Lấy 716 chia cho 60: được phần nguyên: 11, được phần dư là 56


Kết quả: Chính ngọ ngày O1/O1/2O15 tại TPHCM là 11 giờ 56 phút trùng với kết quả trong ví dụ 2 ở trên.

Lưu ý: phương pháp này là tương đối trong thuật toán thiên văn họ không tính thế này.

Tổng quát lại:


Khi chúng ta không quan tâm tới yếu tố thời gian âm lịch thì vấn đề này chẳng có ý nghĩa gì. Còn khi bạn đã đọc đến đây và quan tâm thì nó là một vấn đề cốt lõi trong văn hóa và những việc tâm linh. Những ví dụ sau có thể bạn hình dung được một số góc cạnh: 

Chọn giờ để khâm liệm, nếu bạn chọn nhầm giờ vào tứ hành xung, trùng tang...? Các vấn đề cưới hỏi, động thổ... củng như vậy.

Xem lá số tử vi: 70% khó khăn của tử vi đó chính là xác định giờ sinh, khi xác định được giờ sinh mọi việc thường dễ dàng hơn.

....

Trong sách Bát Trạch Minh Cảnh của Thái Kim Oanh có phần trình bày đầu tiên là phần hướng dẫn chọn giờ âm lịch, tuy nhiên theo mình là sai nhé bạn!

Tôi nghỉ rằng bạn đọc quan tâm về lĩnh vực này sẽ khó khăn để hiểu bài viết. TTL Blog gợi ý cho các bạn hãy tải chương trình của tôi về và tham khảo các kết quả của các ngày bình thường, các ngày đặc biệt... để có nhận định chung hơn, sau đó cùng tìm hiểu nhé!

Các bạn có thể xem các bài viết liên quan do mình viết:


Lịch vạn niên 2023 excel - PDF Âm Dương

By Trần Tứ Liêm on Thứ Sáu, 26 tháng 8, 2022






Lịch Excel 2023 ở đây, bạn có thể tải về và sử dụng tùy mục đích:
DOWNLOAD LỊCH EXCEL 2023

Tác giả: Trần Tứ Liêm

Nhà xuất bản: Không

Loại file: Excel, PDF, corel, photoshop
(mới cập nhật)

Lịch này được xuất bản từ lịch số thông minh chạy trên file excel tự động. Bạn có thể tải về dùng ở đây.

Nếu bạn muốn tải file PDF lịch năm 2023 hãy nhấp vào từng tháng phía dưới:

Tháng 1Tháng 2Tháng 3Tháng 4Tháng 5Tháng 6Tháng 7Tháng 8Tháng 9Tháng 10Tháng 11Tháng 12

Tải các bộ lịch khác:

Để hiểu rõ về lịch excel 2023 mời bạn xem phần nội bên dưới:

NỘI DUNG LỊCH EXCEL 2023

Lịch tháng 1 năm 2023 Quý Mão
lịch tháng 1 năm 2023 Quý Mão
Lịch tháng 2 năm 2023 Quý Mão
Lịch tháng 2 năm 2023 Quý Mão
Lịch tháng 3 năm 2023 Quý Mão
Lịch tháng 3 năm 2023 Quý Mão
Lịch tháng 4 năm 2023 Quý Mão
Lịch tháng 4 năm 2023 Quý Mão
Lịch tháng 5 năm 2023 Quý Mão
Lịch tháng 5 năm 2023 Quý Mão
Lịch tháng 6 năm 2023 Quý Mão
Lịch tháng 6 năm 2023 Quý Mão
Lịch tháng 7 năm 2023 Quý Mão
Lịch tháng 7 năm 2023 Quý Mão
Lịch tháng 8 năm 2023 Quý Mão
Lịch tháng 8 năm 2023 Quý Mão
Lịch tháng 9 năm 2023 Quý Mão
Lịch tháng 9 năm 2023 Quý Mão
Lịch tháng 10 năm 2023 Quý Mão
Lịch tháng 10 năm 2023 Quý Mão
Lịch tháng 11 năm 2023 Quý Mão
Lịch tháng 11 năm 2023 Quý Mão
Lịch tháng 12 năm 2023 Quý Mão
Lịch tháng 12 năm 2023 Quý Mão


TÀI LIỆU KHÁC

Trên website bcs.bibon.xyz có chứa các tài kiệu liên quan như bên dưới, mời bạn tham khảo thêm. Hy vọng nó có ý nghĩa với bạn:Sách 555 món ăn Việt Nam
Lịch 2023bách cátLịch Excel 2023
Loại tài liệu:

Keyword: lịch | lịch excel | lịch excel 2023 | tải lịch 2023 | lịch âm dương năm 2023 | lịch âm 2023 | lịch âm 2023 | tải lịch 2023 | lịch năm quý mão | lịch excel quý mão | lich excel 2023 | dowload lich 2023 | lich quy mao | lịch quý mão

Lịch vạn niên excel năm 2022 (xls, pdf)

By Trần Tứ Liêm on

Tải file excel lịch tháng năm 2022 Nhâm Dần (âm dương)


Tải lịch excel 2023: DOWNLOAD

Lịch này được xuất tự động từ bộ lịch vạn niên excel của Trần Tứ Liêm, mời bạn tham khảo:
LICH-VAN-NIEN-EXCEL-V1.2Tải xuốngLịch excel tháng 1 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 1 năm 2022 Nhâm Dần – Âm Dương
Lịch excel tháng 2 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 3 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 4 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 5 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 6 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 7 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 8 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 9 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 10 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 11 năm 2022 Nhâm Dần – Âm DươngLịch excel tháng 12 năm 2022 Nhâm Dần – Âm Dương

Ngày nào tốt để xuất hành, khai trương năm 2020?

By Trần Tứ Liêm on Thứ Năm, 19 tháng 12, 2019

Ngày nào tốt để xuất hành, hoặc khai trương năm 2020?
Hình hoa đào mùa xuân
Hình hoa đào mùa xuân (nguồn internet)
Tấm hình này có sức sống, nên TTL Blog đặt lại tên là Mùa xuân khoe sắc
Xem hình này đã được chỉnh sửa tại https://www.flickr.com/...

Mời các bạn cùng tham khảo các ngày đầu năm 2020 sau:

Mình thích viết Blog, tìm hiểu Tử Vi, Phong Thủy, Kiến Trúc, nghiên cứu Lịch vạn niên, đọc sách tùm lum, hay chia sẽ kiến thức.

QUẢNG CÁO

đặc sản

BẢN ĐỒ BLOG

Xem tử vi 2024

xem tử vi năm 2024

Xem nhiều nhất

Bài viết mới nhất

Bài viết theo thời gian

SƠ ĐỒ BLOG

Bài Nỗi Bật

Tin mới nhất - VnExpress RSS

Blog Bi Bon

Bách Cát Shop

Kho Hàng Giá Sỉ

Dịch Vụ Sửa Nhà

Thảo Mộc Thái Phong

Đặc Sản Shop

Shop Bi Bon

Tổng số lượt xem trang