Làm sao để tính ngày âm???

  • Thread starter Thread starter prhidden
  • Ngày gửi Ngày gửi
Liên hệ QC

prhidden

Thành viên mới
Tham gia
8/1/08
Bài viết
8
Được thích
0
Mình đang gặp rắc rối với ngày âm.Làm sao Mà Máy tự cập nhật ngày âm vào trong excel được vậy bạn ? Vd : Ngày ... tháng ... năm 2008.Mình muốn làm sao mà ngày âm được cập nhật vào trong chỗ ngày và tháng.Bạn nào biết xin chỉ dùm Mình.Cám ơn nhiều.
 
Cám ơn các bạn nhiều.Cho Mình hỏi thêm chút nữa nha.Mình có down lịch ngày âm của Thư Nghi, bạn viết rất hay ( tuy hok hiểu viết gì :D ).Mình có 1 file excel khác, có nội dung : ngày ... tháng .... năm .... .Mình muốn máy tự động cập nhật ngày tháng năm âm vào " ... ".Vậy làm sao vậy Các bạn.Cảm ơn các bạn rất nhiều.
 
Bạn tham khảo thêm cái này sẽ hiểu ngay
Thuật toán chuyển đổi giữa ngày dương và âm

Trong tính toán thiên văn người ta lấy ngày 1/1/4713 trước công nguyên của lịch Julius (tức ngày 24/11/4714 trước CN theo lịch Gregorius) làm điểm gốc. Số ngày tính từ điểm gốc này gọi là số ngày Julius (Julian day number) của một thời điểm. Ví dụ, số ngày Julius của 1/1/2000 là 24515455. Dùng các công thức sau ta có thể chuyển đổi giữa ngày/tháng/năm và số ngày Julius. Phép chia ở 2 công thức sau được hiểu là chia số nguyên, bỏ phần dư: 23/4=5.
Đổi ngày dd/mm/yyyy ra số ngày Julius jd

a = (14 - mm) / 12
y = yy+4800-a
m = mm+12*a-3

Lịch Gregory:

jd = dd + (153*m+2)/5 + 365*y + y/4 - y/100 + y/400 - 32045

Lịch Julius:

jd = dd + (153*m+2)/5 + 365*y + y/4 - 32083
Đổi số ngày Julius jd ra ngày dd/mm/yyyy

Lịch Gregory (jd lớn hơn 2299160):

a = jd + 32044;
b = (4*a+3)/146097;
c = a - (b*146097)/4;

Lịch Julius:

b = 0;
c = jd + 32082;

Công thức cho cả 2 loại lịch:

d = (4*c+3)/1461;
e = c - (1461*d)/4;
m = (5*e+2)/153;
dd = e - (153*m+2)/5 + 1;
mm = m + 3 - 12*(m/10);
yy = b*100 + d - 4800 + m/10;
Nếu ngôn ngữ lập trình bạn dùng không hỗ trợ phép chia số nguyên bỏ phần dư (VD: JavaScript), bạn có thể định nghĩa một hàm INT(x) để lấy số nguyên lớn nhất không vượt quá x: INT(5)=5, INT(3.2)=3, INT(-5)=-5, INT(-3.2)=-4 v.v. Khi đó, INT(m/10) sẽ trả lại kết quả của phép chia số nguyên. (Nhiều ngôn ngữ có sẵn hàm floor() cho phép làm việc này.) Các phép chuyển đổi giữa ngày tháng và số ngày Julius có thể được thực hiện với mã JavaScript như sau:
function jdFromDate(dd, mm, yy)
var a, y, m, jd;
a = INT((14 - mm) / 12);
y = yy+4800-a;
m = mm+12*a-3;
jd = dd + INT((153*m+2)/5) + 365*y + INT(y/4) - INT(y/100) + INT(y/400) - 32045;
if (jd < 2299161) {
jd = dd + INT((153*m+2)/5) + 365*y + INT(y/4) - 32083;
}
return jd;
function jdToDate(jd)
var a, b, c, d, e, m, day, month, year;
if (jd > 2299160) { // After 5/10/1582, Gregorian calendar
a = jd + 32044;
b = INT((4*a+3)/146097);
c = a - INT((b*146097)/4);
} else {
b = 0;
c = jd + 32082;
}
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);


return new Array(day, month, year);
Trong các công thức sau, timeZone là số giờ chênh lệch giữa giờ địa phương và giờ UTC (hay GMT). (Để tính lịch Việt Nam, lấy timeZone = 7.0).

sưu tầm trên Internet
 
Bạn đừng xóa sh Data nhé. Chỉ mới làm đến 2012 trong file có 1 UDF NgayAL tôi lấy từ caulacbovb để kiểm tra (thú thật tôi cũng không hiểu lắm UDF này).
Nếu có thể bạn xem file của LearnExcel, rất hay về AL, can chi, tiết...
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom