Cách thông minh để đếm số ngày kể từ X là gì?


11

Tôi bắt đầu làm việc tại vị trí hiện tại của mình kể từ ngày 17 tháng 11 năm 2014. Tôi muốn biết bao nhiêu ngày đã trôi qua. Bạn có ý tưởng nào về cách sử dụng Linux để đưa ra một giải pháp đơn giản và hay không?


Tôi cuối cùng đã làm một cái gì đó tương tự trong một kịch bản perl; Tôi đã sử dụng hàm timelocal () để lấy số giây từ epoch đến ngày đã cho (ví dụ: ngày 17 tháng 11 năm 2014), sau đó trừ đi từ epoch-date-giây hiện tại, sau đó chia cho 86400 (giây trong một ngày). Tôi chắc chắn ai đó sẽ tìm ra giải pháp chỉ dành cho vỏ :)
Jeff Schaller

2
Số học thời gian có rất nhiều trường hợp đặc biệt khó khăn. Mặc dù những điều đơn giản như trừ dấu thời gian UNIX và chia cho 86.400 sẽ cho bạn câu trả lời gần đúng, tốt hơn hết là bạn nên sử dụng thư viện thời gian chuyên dụng có tính đến các trường hợp đặc biệt, ví dụ như Python dateutil.
Reid

1
Một số câu trả lời trong tính toán nhanh chóng sự khác biệt ngày cũng có thể giúp đỡ ở đây.
manatwork 14/07/2015


@ msh210 bạn bị cấm suốt đời và bị kết án tù 1 tháng trong khi phục vụ cộng đồng với tư cách là người dọn mã cho mã COBOL cổ đại.
ychaouche

Câu trả lời:


14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago

4
Điều này được sai giây giây. Ý tôi là, điều đó bây giờ hầu như không quan trọng , nhưng trong 10 nghìn năm hoặc lâu hơn , lỗi tích lũy có thể đủ để quan trọng.
Kevin

2
Số giây nhảy xác suất sẽ gây ra lỗi trong khoảng 0,000001%. Điều này là không đáng kể so với số ngày sai mà phương pháp này sẽ đưa ra với các địa phương nơi thời gian tiết kiệm ánh sáng được quan sát: 2% các trường hợp ...
jlliagre

2
@Kevin: Nếu anh ấy muốn biết anh ấy đã làm việc ở đâu đó bao nhiêu ngày, chúng tôi có thể (cho đến khi tiến xa hơn trong quá trình đông lạnh hoặc y học), đừng bận tâm quá nhiều về điều này ^^
Olivier Dulac

1
@jlliagre:% s là thời gian Unix, luôn là UTC, thiếu DST.
Kevin

1
Rất có thể anh ta sẽ tự hỏi về số ngày làm việc trong khi nhàn rỗi sau bàn làm việc. Vì có lẽ không phải là khoảng nửa đêm mà là khoảng 8 giờ sáng đến 5 giờ chiều (và date -d 2014/11/17đưa ra dấu thời gian của nửa đêm như không có thời gian đề cập) DST không thành vấn đề.
wurtel

5

Vâng, trên mặt của nó:

$ date --date="-239 days"
Mon Nov 17 15:25:40 CET 2014

Trong một tập lệnh (không hiệu quả lắm, nhưng ... có lẽ nó xử lý giây nhuận?;))

i=0
result=""
while [ "$result" != "20141117" ]
do
    i=$((i+1))
    result=$(date --date="-$i days" +%Y%m%d)
done
echo "$i" days have passed since "$result"

Thậm chí agođược hiểu:date --date="239 days ago"
Chấn thương kỹ thuật số

1
@DigitalTrauma quá tệ, nó không được bản địa hóa. Eg LC_ALL=ru_RU.utf8 date --date="239 дней назад"cho tôi kết quả tương tự như date --date="239".
Ruslan


1

Tôi đã thử python trên dòng lệnh.

$ python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"
246 days, 0:00:00 

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.