Hướng dẫn convert serial number to date javascript - chuyển đổi số sê-ri thành ngày javascript

Câu trả lời ngắn

new Date[Date.UTC[0, 0, excelSerialDate - 1]];

Tại sao điều này hoạt động

Tôi thực sự thích câu trả lời của @leggett và @stever, và trong khi chúng chủ yếu làm việc, tôi muốn đào sâu hơn một chút để hiểu cách

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
3 hoạt động.

Lưu ý: Có thể có vấn đề với độ lệch múi giờ, đặc biệt là đối với ngày cũ [trước năm 1970]. Xem trình duyệt, múi giờ, lỗi Chrome 67 [thay đổi thời gian lịch sử] vì vậy tôi muốn ở lại UTC và không dựa vào bất kỳ sự thay đổi nào của giờ nếu có thể.

Ngày Excel là số nguyên dựa trên ngày 1 tháng 1 năm 1900 [trên PC. Trên Mac, nó có trụ sở từ ngày 1 tháng 1 năm 1904]. Giả sử chúng ta đang ở trên PC.on PC. on MAC it is based from Jan 1st, 1904]. Let's assume we are on a PC.

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]

Ngày trong JS dựa trên

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
4. Nếu chúng tôi sử dụng
1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
5, nó sẽ trả lại số mili giây kể từ thời điểm cơ sở đó, ở UTC. Nó có một số chức năng thú vị mà chúng ta có thể sử dụng cho lợi ích của mình.

Tất cả các phạm vi thông thường của các tham số của

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
3 đều dựa trên 0 ngoại trừ
1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
7. Nó chấp nhận các số bên ngoài các phạm vi đó và chuyển đổi đầu vào thành hơn hoặc dưới các tham số khác.

Date.UTC[1970, 0, 1, 0, 0, 0, 0] is 0ms
Date.UTC[1970, 0, 1, 0, 0, 0, 1] is 1ms
Date.UTC[1970, 0, 1, 0, 0, 1, 0] is 1000ms

Nó cũng có thể làm ngày sớm hơn 1970-01-01. Ở đây, chúng tôi giảm trong ngày từ 0 xuống 1, và tăng giờ, phút, giây và mili giây.

Date.UTC[1970, 0, 0, 23, 59, 59, 999] is -1ms

Nó thậm chí còn đủ thông minh để chuyển đổi nhiều năm trong phạm vi 0-99 đến 1900-1999

Date.UTC[70, 0, 0, 23, 59, 59, 999] is -1ms

Bây giờ, làm thế nào để chúng ta đại diện cho 1900-01-01? Để dễ dàng xem đầu ra theo ngày tôi muốn làm

new Date[Date.UTC[1970, 0, 1, 0, 0, 0, 0]].toISOString[] gives "1970-01-01T00:00:00.000Z"
new Date[Date.UTC[0, 0, 1, 0, 0, 0, 0]].toISOString[] gives "1900-01-01T00:00:00.000Z"

Bây giờ chúng ta phải đối phó với múi giờ. Excel không có khái niệm về múi giờ trong đại diện ngày của nó, nhưng JS thì có. Cách dễ nhất để giải quyết vấn đề này, IMHO, là xem xét tất cả các ngày xuất sắc được nhập dưới dạng UTC [nếu bạn có thể].

Bắt đầu với ngày Excel là 732.0

new Date[Date.UTC[0, 0, 732, 0, 0, 0, 0]].toISOString[] gives "1902-01-02T00:00:00.000Z"

mà chúng tôi biết là nghỉ 1 ngày vì vấn đề năm bước nhảy được đề cập ở trên. Chúng ta phải giảm tham số ngày 1.

new Date[Date.UTC[0, 0, 732 - 1, 0, 0, 0, 0]] gives "1902-01-01T00:00:00.000Z"

Điều quan trọng cần lưu ý là nếu chúng tôi xây dựng một ngày sử dụng hàm tạo ngày [năm, tháng, ngày], các tham số sử dụng timezone địa phương của bạn. Tôi đang ở trong thời gian PT [UTC-7/UTC-8] và tôi nhận được

new Date[1902, 0, 1].toISOString[] gives me "1902-01-01T08:00:00.000Z"

Đối với các bài kiểm tra đơn vị của tôi, tôi sử dụng

new Date[Date.UTC[1902, 0, 1]].toISOString[] gives "1902-01-01T00:00:00.000Z"

Một chức năng TypeScript để chuyển đổi ngày nối tiếp Excel thành ngày JS là

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
0

Và để trích xuất ngày UTC để sử dụng

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
1

Tôi có mã JavaScript sau đây chuyển đổi ngày [chuỗi] thành số sê -ri ngày được sử dụng trong Microsoft Excel:

1900-01-01 is 1.0
1901-01-01 is 367.0, +366 days [Excel incorrectly treats 1900 as a leap year]
1902-01-01 is 732.0, +365 days [as expected]
2

Vì vậy, làm thế nào để tôi làm ngược lại? [Có nghĩa là mã JavaScript chuyển đổi số sê -ri ngày được sử dụng trong Microsoft Excel thành chuỗi ngày?

Dữ liệu ngày 11 tháng 4 • & NBSP; 13.640 điểm • in Database by
• 13,640 points
514 views

1 Câu trả lời cho câu hỏi này.

Các câu hỏi liên quan trong cơ sở dữ liệu

  • Tất cả danh mục
  • Apache Kafka [84][84]
  • Apache Spark [596][596]
  • Azure [131][131]
  • Dữ liệu lớn Hadoop [1.907][1,907]
  • Blockchain [1.673][1,673]
  • C# [133][133]
  • C ++ [268][268]
  • Tư vấn nghề nghiệp [1.060][1,060]
  • Điện toán đám mây [3,391][3,391]
  • An ninh mạng & hack đạo đức [147][147]
  • Phân tích dữ liệu [1.266][1,266]
  • Cơ sở dữ liệu [854][854]
  • Khoa học dữ liệu [75][75]
  • DevOps & Agile [3.500][3,500]
  • Tiếp thị kỹ thuật số [111][111]
  • Các chủ đề về sự kiện & xu hướng [28][28]
  • IoT [Internet of Things] [387][387]
  • Java [1.215][1,215]
  • Kotlin [3][3]
  • Quản trị Linux [384][384]
  • Học máy [337][337]
  • MicroStrargety [6][6]
  • PMP [423][423]
  • Power BI [516][516]
  • Python [3.155][3,155]
  • RPA [650][650]
  • Salesforce [92][92]
  • Selenium [1.569][1,569]
  • Kiểm tra phần mềm [56][56]
  • Tableau [608][608]
  • Talend [73][73]
  • Các loại [124][124]
  • Phát triển web [3.000][3,000]
  • Hỏi chúng tôi bất cứ điều gì! [66][66]
  • Những người khác [1.425][1,425]
  • Phát triển di động [161][161]

Đăng ký nhận bản tin của chúng tôi và nhận được các khuyến nghị cá nhân hóa.

Bạn co săn san để tạo một tai khoản? Đăng nhập.

Bài Viết Liên Quan

Chủ Đề