2017-10-10 1153 views
0

我正在讀取Excel表格中的數據,第5列是日期字段。我有以下的邏輯,以確保輸入的日期將轉換爲YYYY-MM-DD格式 -從nodejs中的xlsx文件獲取統一的日期格式

var valid_from = new Date(data[counter][5]); 
valid_from_new = var formatedDate = moment(valid_from).format("YYYY-MM-DD"); 
reqBody.valid_from = valid_from_new.toString(); 

我有日期2017-10-10開始用,我能夠通過我的節點應用精細讀它。只要我不在Microsoft Excel 2010中編輯此字段,它就可以工作。如果我編輯它或只是查找/替換值,我會在reqBody.valid_from中獲得unix默認日期(1970-01-01)。

要找出更換後會發生什麼,我檢查,如果我取代2017-10-102017-10-20然後「清格式」(EXCEL工具),我得到43028顯示在紙張,而對於日2017-10-10它仍然是相同的,即2017-10-10。我不明白爲什麼excel的行爲如此。

這可以由我的應用程序統一處理嗎?我只想讓「YYYY-MM-DD」格式適用於任何Excel版本。如果在提供文件之前可以進行一次格式更改或清除格式,那就沒有問題,並且可以正常工作。

回答

0

我不明白爲什麼excel的行爲如此。

Excel的行爲就像它存儲2017-10-10作爲一個序列日期。這意味着它是一個整數,表示從1900年1月1日起Windows系統已過去的天數。 (可能爲1905或類似的mac)。在你的具體情況下,它顯然是43028.它顯示了一個格式爲人們閱讀爲2017-10-10在你的情況下的轉換日期。你會注意到這一點,因爲你的單元格格式可能是某種類型的日期或自定義用戶格式。如果您通過將日期作爲文本輸入'來輸入日期,您會注意到當您更改單元格格式時,格式不會更改。日期實際上只是文本而不是格式化的日期。以類似excel日期的格式輸入的數字,excel通常會嘗試自動將它們轉換爲您的序列日期值。它有一個內置的格式列表,我相信也會查看你的系統設置格式。

作爲附註,數字的小數部分表示時間。一天的分數。 0是00:00:00,.5是12:00:00。

這可以由我的應用程序統一處理嗎?

我相信對此的回答是「是」,但超出了我的專長。我高度懷疑這是因爲你的代碼最初是作爲文本處理它的。當它從Excel中接收表示日期的Excel中的整數時,事情就會出錯。

+0

感謝您的回答。我將解析值以便稍後進行字符串處理。如果我指示將工作表添加到系統中以確保日期字段被格式化爲文本之前的團隊,您認爲這可能是一個問題嗎? –

+0

通常以日期存儲的日期更適合工作,因爲很多代碼都有處理日期的特殊例程。所以將它作爲日期存儲會讓你稍後轉換它的過程。其次,將日期存儲爲日期而不是字符串可能會減少內存。如果你打算讓它們先把它作爲一個字符串存儲起來,那麼當它沒有發生時,你需要強制執行或處理錯誤。 –