Về ngày nhận - n ngày


8

Giả sử tôi có một ngày cụ thể được lưu trữ trong một biến date_m. Tôi muốn ((date_m)-25)hẹn hò.

Ví dụ: Tôi đã 15/09/2014lưu trữ trong biến của mình, sau đó tôi muốn 21/08/2014trả về nếu tôi trừ 25 từ ngày được lưu trong biến.

Câu trả lời:


13

Với việc triển khai GNU date, để hiển thị ngày hôm qua, hãy nhập:

$ date --date="1 days ago"

HOẶC LÀ

$ date --date="-1 day"

Đối với câu hỏi của bạn:

$ date --date="25 days ago"

HOẶC LÀ

$ date --date="-25 day"

Để sử dụng nó với các biến, bạn có thể sử dụng $():

pastDate=$(date --date="-25 day")
echo "$pastDate"

Đối với nngày trường hợp chung và cho một ngày cụ thể:

#!/bin/bash
date1="Tue Sep 2 07:53:47 EEST 2014"
echo "Before? "
read n
date --date="$date1 -$n day"

Nguồn


GNU datekhông phân tích cú pháp 15/09/2014như một ngày hợp lệ mặc dù.
Kusalananda

1

Sau đây ngày và số ngày được khai báo.

Tập lệnh biến các ngày tính bằng giây và tính toán thời gian 1 ( Tp1) là bao nhiêu nếu số ngày (tính bằng giây) được trừ vào bảng thời gian 2 ( Tp2) đã cho. Trong giây cuối được chuyển đổi trở lại trong ngày.

Date_m=2014/09/15
Days=25
Seconds=$(echo "$Days"*60*60*24| bc -l)
Tp2date=$(date -d "$Date_m" +%Y/%m/%d)
Tp2sec=$(date -d "$TD" +%s)
Tp1sec=$(echo "$TDsec"-"$Seconds"| bc -l)
Tp1date=$(date -d @$Tp1sec)
echo "$Tp1date"

Các định dạng của ngày là 15/09/2014, không phải với năm đầu tiên.
Kusalananda

0

Hơi muộn màng, đây là một cách để xử lý ngày định dạng dd / mm / yyyy không phải của Hoa Kỳ với điều chỉnh tương đối 25 ngày:

date_m='15/09/2014'
date --date "$(IFS=/ read d m y <<<"$date_m"; echo "$m/$d/$y - 25 days")" +%d/%m/%Y

21/08/2014

Nó giả định một lớp vỏ như bashcó khả năng xử lý chuyển hướng chuỗi <<<và GNU date.

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.