Làm cách nào để có được ngày kết thúc tháng trước, dựa trên ngày xử lý?
Ví dụ:
- Ngày xử lý = 15jan2015
- Ngày dự kiến = 31d2014,
- Ngày xử lý = 10feb2015
- Ngày dự kiến = 31jan2015
Làm cách nào để có được ngày kết thúc tháng trước, dựa trên ngày xử lý?
Ví dụ:
Câu trả lời:
Với GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Một số shell có tích hợp hỗ trợ cho thao tác ngày:
Với ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
Với zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
Có rất nhiều cách để làm điều này; đây là cái đơn giản nhất tôi tìm thấy (ở đây giả sử GNU date
):
$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Bạn gặp lỗi vì không có 2011-12-30 ở đó. Đó là, bù ngày được thực hiện trên thời gian lịch. 2011-12-31 trừ đi 31 ngày mang lại cho bạn 2011-11-30 vì mất 31 ngày 31. Không mất 31 * 24 * 60 * 60 * 60 giây so với thời gian hiện tại. So sánh với TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
thứ mang lại cho bạn ngày 29, tức là lần này là ngày 24 * 60 * 60 * 60 giây trước.
Đây là phiên bản hoạt động trên Mac OS, sử dụng date
tiện ích BSD :
date -v1d -v-1d +%d%b%Y
Các đối số được áp dụng theo thứ tự. Bạn có thể tưởng tượng rằng một ngày được chuyển từ một đối số sang đối số tiếp theo. Ví dụ:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017 / 02-28+%d%b%Y
) -> 28Feb2017Bạn có thể đạt được bất kỳ số tháng tiến hoặc lùi bằng cách sử dụng date -v-1m -v1d -v-1d
, thay thế -1m
bằng số tháng lùi hoặc tiến ( +1m
bạn muốn).
Đó là câu trả lời chung chung. Câu hỏi này đặc biệt hỏi về ngày liên quan đến ngày bắt đầu. Tiện ích ngày Mac OS / BSD không cho phép bạn cung cấp dấu thời gian để bắt đầu, nhưng bạn có thể đặt riêng từng phần tử ngày:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31 tháng 4 năm 2014
Hãy thử sử dụng mã này
date -d "-$(date +%d) days month" +%Y-%m-%d