Hướng dẫn php check if date is within 30 days - kiểm tra php nếu ngày trong vòng 30 ngày

Tôi đang gặp một chút vấn đề ở đây.

Tôi chèn một ngày vào cơ sở dữ liệu:

if ($date < strtotime('-30 days'))
5.

Tôi chỉ có thể gọi cái này bằng cách sử dụng

if ($date < strtotime('-30 days'))
6, tất nhiên. Bây giờ, tôi cần kiểm tra xem ngày chèn này có phải là 30 ngày trước không và nếu vậy, thực hiện một hành động.30 days ago and if so, execute an action.

$query = "SELECT date_last_applied FROM applicants WHERE memberID='$id'";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)) {
    $date = strtotime($row['date_last_applied']);

}

Đó là về tất cả những gì tôi có .. Tôi đã thử một số thứ, nhưng tất cả đều thất bại. :(

Đã hỏi ngày 10 tháng 11 năm 2011 lúc 14:08Nov 10, 2011 at 14:08

Hướng dẫn php check if date is within 30 days - kiểm tra php nếu ngày trong vòng 30 ngày

Aart Den Braberaart Den BraberAart den Braber

8381 Huy hiệu vàng11 Huy hiệu bạc22 Huy hiệu đồng1 gold badge11 silver badges22 bronze badges

if ($date < strtotime('-30 days'))

Nếu bạn chỉ thực hiện các hành động vào ngày cũ hơn 30 ngày, bạn nên sử dụng giải pháp của Marco.only performing actions on dates older than 30 days, you should use Marco's solution.

Đã trả lời ngày 10 tháng 11 năm 2011 lúc 14:10Nov 10, 2011 at 14:10

Hướng dẫn php check if date is within 30 days - kiểm tra php nếu ngày trong vòng 30 ngày

3

Bạn có thể làm điều đó thông qua SQL chỉ nhận được ngày trong 30 ngày qua

SELECT date_last_applied 
FROM applicants 
WHERE memberID = your_id
  AND date_last_applied BETWEEN
      DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()

hoặc hơn 30 ngày

SELECT date_last_applied 
FROM applicants 
WHERE memberID = your_id
  AND date_last_applied < DATE_SUB(NOW(), INTERVAL 30 DAY)

Đã trả lời ngày 10 tháng 11 năm 2011 lúc 14:10Nov 10, 2011 at 14:10

Hướng dẫn php check if date is within 30 days - kiểm tra php nếu ngày trong vòng 30 ngày

Bạn có thể làm điều đó thông qua SQL chỉ nhận được ngày trong 30 ngày quaMarco

hoặc hơn 30 ngày14 gold badges128 silver badges151 bronze badges

7

Hãy nói rằng chúng tôi có vấn đề sau đây: Chúng tôi phải kiểm tra xem ngày trước hơn một tháng hay chưa hơn một tháng. Nhiều nhà phát triển đi sai hướng bằng cách tính toán tháng hiện tại và sau đó trừ đi số tháng từ nó. Tất nhiên, cách tiếp cận này chậm và đầy rủi ro cho phép lỗi. Kể từ hai tháng trước tháng 1, đó là tháng đầu tiên của năm, thực sự là tháng 11, đó là tháng thứ mười một. Vì những cạm bẫy này, cách tiếp cận này là hoàn toàn sai.

Hướng dẫn php check if date is within 30 days - kiểm tra php nếu ngày trong vòng 30 ngày

Strtotime () mạnh hơn rất nhiều so với bạn nghĩ!

Câu hỏi đặt ra là liệu PHP có thể giúp chúng tôi với các chức năng tích hợp để thực hiện các tính toán này cho chúng tôi hay không. Rõ ràng, từ phiên bản 5.3.0 trở lên, có một phần OOP, rất tuyệt, nhưng thật không may, phiên bản này vẫn chưa được cập nhật ở mọi nơi. Vì vậy, làm thế nào để hoàn thành nhiệm vụ?

Cách tiếp cận sai

Như tôi đã nói, có nhiều cách để đi sai hướng. Một trong số đó là trừ đi 30 ngày kể từ ngày hiện tại. Điều này là hoàn toàn sai, bởi vì không phải mỗi tháng có 30 ngày. Ở đây, một số nhà phát triển sẽ bắt đầu xác định trước các mảng để chỉ ra số ngày trong mỗi tháng, sau đó sẽ được sử dụng trong các tính toán phức tạp của chúng. Dưới đây là một ví dụ về cách tiếp cận sai này.

echo date('Y-m-d', strtotime(date('Y-m-d')) - 60*60*24*30);

Dòng này đầy sai lầm. Trước hết là Strtotime (ngày (‘Y-M-D,)) có thể được thay thế bằng Strtototime thanh lịch hơn (‘ Now,), nhưng đối với điều này sau. Một sai lầm lớn khác là 60*60*24*30, là số giây trong 30 ngày có thể được xác định trước là một hằng số. Cuối cùng, kết quả là sai, vì không phải mỗi tháng có 30 ngày.strtotime(date(‘Y-m-d’)) can be replaced by the more elegant strtotime(‘now’), but for this later. Another big mistake is that 60*60*24*30, which is number of seconds in 30 days can be predefined as a constant. Eventually the result is wrong, because not every month has 30 days.

Cách tiếp cận chính xác

Một nghiên cứu nhỏ về vấn đề và các chức năng trong các phiên bản trước 5.3.0 của PHP là cần thiết. Nghiên cứu trường hợp điển hình về định dạng ngày xảy ra khi làm việc với ngày từ cơ sở dữ liệu. Mã sau đây là một ví dụ cổ điển.

// 2008 05 23, 2008-05-23 is stored into the DB
echo date('Y m d', strtotime('2008-05-23'));
 
// 2008 May 23
echo date('Y F d', strtotime('2008-05-23'));

Vấn đề, có lẽ, là quá thường xuyên strtotime () được sử dụng như thế này, với chính xác loại chuỗi này. Tuy nhiên, điều thú vị hơn nhiều là strtotime () có thể làm nhiều hơn nữa.

Strtotime () có thể làm nhiều hơn nữa

Trước tiên chúng ta hãy nhìn vào tài liệu của chức năng này. Nó chấp nhận tham số nào?

int strtotime ( string $time [, int $now = time() ] )

Chức năng dự kiến ​​sẽ được cung cấp một chuỗi chứa định dạng ngày tiếng Anh và sẽ cố gắng phân tích định dạng đó thành dấu thời gian UNIX (số giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 UTC), liên quan đến dấu thời gian được đưa ra ngay bây giờ, hoặc Thời gian hiện tại nếu bây giờ không được cung cấp.

Đặc biệt, chúng tôi quan tâm đến tham số đầu tiên, thời gian.

Thời gian - chuỗi ngày/thời gian. Các định dạng hợp lệ được giải thích trong các định dạng ngày và giờ.

Điều đặc biệt quan trọng cần lưu ý là những định dạng ngày và thời gian hợp lệ là gì.

Dưới đây là các định dạng được hỗ trợ, nhưng thú vị nhất là những định dạng tương đối.

Chính xác các định dạng này rất thuận tiện trong trường hợp của chúng tôi, bởi vì chúng cho chúng tôi khả năng làm việc với các chuỗi có thể đọc được của con người, và đây là một số ví dụ từ tài liệu về Strtotime ().

echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";

Do đó, một chuỗi hợp lệ sẽ là 1 tháng trước.

// if current date is 2011-11-04, this will return 2011-10-04
echo date('Y-m-d', strtotime('1 month ago'))

Hoặc "-1 tháng":

// the same as the example above
echo date('Y-m-d', strtotime('-1 month'));

Thật thú vị khi đó là +1 -1 tháng cũng là một chuỗi hợp lệ.

if ($date < strtotime('-30 days'))
0

Trong thực tế, Strtotime () có thể làm nhiều hơn hầu hết các nhà phát triển từng tưởng tượng. Có thể việc sử dụng thường xuyên với các ngày được định dạng chuỗi (2010-01-13) làm cho nó hơi không rõ. Dưới đây là một số trường hợp sử dụng thú vị.

if ($date < strtotime('-30 days'))
1

Ví dụ, bạn có biết làm thế nào để có được ngày của ngày trước ngày hôm qua không? Có 2 ngày trước hôm nay, nhưng ở đây, một giải pháp khác.

if ($date < strtotime('-30 days'))
2

Một ví dụ khác là người hoàn toàn dễ đọc:

if ($date < strtotime('-30 days'))
3

Giải pháp của nhiệm vụ

Cuối cùng, giải pháp của nhiệm vụ ban đầu là gì? Vâng, chỉ cần kiểm tra xem một ngày nhiều hơn một tháng trước.

if ($date < strtotime('-30 days'))
4

Bài viết liên quan:

  1. Điều cần biết về mảng PHP
  2. JavaScript Nhận Tháng địa phương có tên đầy đủ
  3. Chuỗi PHP: Cách nhận phần mở rộng của tệp

Nguồn: http://www.stoimen.com/blog/2011/11/04/how-to-check-if-a-date-is-more-or-a-than-a-month-ago-with- PHP/

Ý kiến ​​được thể hiện bởi những người đóng góp Dzone là của riêng họ.