2014-10-28 72 views
1

我知道我可以通過以下方式獲得從Excel基於數字的日期(日以來,1899-12-30):[R日期基於Excel的數量

as.Date(41000, origin = "1899-12-30") 

,這將給我「2012- 04-01" 。然而,我想要相反。作爲用戶,我想輸入一個日期作爲字符串,並獲得「1899年至1230年」以來的天數。

東西沿線

as.integer(as.Date('2014-03-01', origin="1899-12-30")) 

,我希望這將導致在41000,而不是在1970-01-01以來的的R天,這是15431.

也許這是愚蠢的,因爲我知道

as.integer(as.Date('2012-04-01')) + 25569 

我只是想知道,如果有哪個做這樣的功能:我可以通過編寫類似手動添加的日子嗎?

回答

4

我想你想difftime爲:

difftime(as.Date('2012-04-01'), as.Date("1899-12-30")) 

## Time difference of 41000 days 
+0

我覺得這正是我想要的。感謝您的快速回復! – 2014-10-28 16:02:52

+2

或只是'as.Date('2012-04-01') - as.Date(「1899-12-30」)' – 2014-10-28 16:04:45

1

手工做吧,簡單和更安全:

d0 <- as.Date('1899-12-30') 
d1 <- as.Date('2014-10-28') 

as.integer(d1 - d0) 
##[1] 41940 # This is interpreted by Excel as '2014-10-28' 

當然,你可以寫一個函數來A R日期轉換爲Excel one:

convert_to_excel_date <- function(d) { 
    # Converts a R date value to an Excel date value 
    # 
    # Parameters: 
    # d: a R date object 
    d0 <- as.Date('1899-12-30') 
    return(as.integer(d - d0)) 
} 
# Example: 
# convert_to_excel_date(as.Date('2018-10-28'))