Vâng, nếu chạy Perl được tính là một phần của tập lệnh, hãy phát triển câu trả lời trong Perl. Câu hỏi tiếp theo là - điều gì định nghĩa một ngày làm việc? Bạn có phải là cửa hàng/cửa hàng mở cửa vào Chủ nhật không? Ngày thứ bảy? Hoặc một doanh nghiệp 9-5 từ thứ Hai đến thứ Sáu? Điều gì về ngày lễ?
Giả sử bạn đang suy nghĩ từ thứ Hai đến thứ Sáu và ngày lễ tạm thời không quan trọng, thì bạn có thể sử dụng thuật toán trong Perl ghi chú rằng wday sẽ là 0 vào Chủ nhật đến 6 ngày thứ Bảy, và do đó, nếu wday là 1, bạn cần trừ 3 * 86400 từ thời gian(); nếu wday là 0, bạn cần trừ 2 * 86400; và nếu wday là 6, bạn cần phải trừ đi 1 * 86400. Đó là những gì bạn đã có trong những thứ vỏ Korn - chỉ cần làm điều đó trong Perl thay vì:
#!/bin/perl -w
use strict;
use POSIX;
use constant SECS_PER_DAY => 24 * 60 * 60;
my(@days) = (2, 3, 1, 1, 1, 1, 1);
my($now) = time;
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($now);
print strftime("%Y-%m-%d\n", localtime($now - $days[$wday] * SECS_PER_DAY));
này giả sử bạn có các mô-đun POSIX; nếu không, sau đó bạn sẽ cần phải làm khoảng cùng một printf() như bạn đã sử dụng. Tôi cũng sử dụng định dạng ISO 8601 cho các ngày theo sở thích (cũng được sử dụng bởi XSD và SQL) - do đó định dạng được minh họa.
Nguồn
2008-10-22 03:49:57
Bạn đã bỏ qua thứ bảy ... –
Scratch đó - nó được bao phủ bởi các thiết lập mặc định của DAY_DIFF = 1 trước khi trường hợp ... Nó sẽ được rõ ràng hơn nếu mặc định là trong trường hợp. –
Câu trả lời trực tiếp cho câu hỏi 'Làm thế nào để ...' là: đặt một trích dẫn trước và một sau $ {DAY_DIFF} trong lệnh perl. –