10/10/2018, 00:18

Giúp mình làm việc với Ngày Tháng trong PHP

Chào các bác!

Em đang gặp chỗ bí khi làm việc với ngày tháng ở PHP. Công việc là thế này, em đang xây dựng cấu trúc gửi bài viết chèn dữ liệu vào CSDL có các trường title, content, post_date, expired.

post_date sẽ chèn thời gian khi gửi bài viết

Bây giờ em muốn có thêm lựa chọn người gửi bài có thể chỉ định số ngày hết hạn (expried) là 1-30 ngày sau khi gửi bài.

Vậy làm sao tính toán được công thức:
expired= post_date + [1-30]

rồi chèn vào trường expired giá trị kiểu ngày tháng để so sánh được với giá trị time() hiện tại.

Ý muốn là những bài hết hạn sẽ không được đăng và sẽ làm hàm xóa những bài hết hạn 1 cách tự động.

Cảm ơn các bác đã quan tâm
<*kakalot*>
vnpenguin viết 02:31 ngày 10/10/2018
Xem http://www.php.net/manual/en/ref.datetime.php
rekcah viết 02:24 ngày 10/10/2018
Cảm ơn bác đã trả lời, ngay sau khi đăng câu hỏi tôi lại nghĩ ra cách giải quyết. Vấn đề này tôi giải quyết như sau. tôi nêu lên cho những ai quan tâm và rất mong muốn có những cách làm khác.

Các bác copy thử mã PHP này rồi chạy, tôi sẽ giải thích từng dòng:

Code:
$post_date=time(); // Gán giá trị biến $post_date bằng giá trị thời gian hiện thời

echo $post_date; // Hiển thị giá trị biến trước khi cộng
echo "<br>";
$plus=24;  // Định nghĩa biến ngày được cộng vào
$expired=$post_date+($plus*3600); // Công thức để tính giá trị của ngày hết hạn
echo $expired; // Hiển thị ngày hết hạn dạng số nguyên

echo "<br>";
echo gmdate("d.m.Y, h:m:s", $expired+$timezone*3600); // Trình bày ngày hết hạn dạng Ngày.Tháng.Năm trong đó biến $timezone là biến múi giờ (Khai báo ở nơi khác - Việt nam là 7)

// Có thể thay bằng lệnh echo gmdate("d.m.Y, h:m:s", $expired+7*3600);
Cấu trúc trường các post_date, expired cho biến $post_date và $expired đổ dữ liệu vào là số nguyên INT(11).

<*kakalot*>
rekcah viết 02:18 ngày 10/10/2018
Lại gặp chỗ bí về dạng ngày tháng khác mà tìm không được đành lại phải lôi lại cái này ra để nhờ các bác giúp đỡ.

Cái này là bí về Mysql + PHP ko chỉ riêng PHP. Vấn đề cụ thể như sau:

Tôi có 1 trường trong bảng CSDL là timestamp với kiểu giá trị datetime. Giá trị mặc định của nó là '0000-00-00 00:00:00'

Bây giờ làm sao so sánh nó được với ngày tháng năm hiện tại, vì yêu cầu hiện thời là phải so sánh nó với giá trị thời gian hiện tại nếu thời gian hiện tại (VD: 2006-05-19 23:48:19) lớn hơn biến đó 7 ngày thì thực thiện công việc 1, ngược lại thực hiện công việc 2.

Rất rất mong các bác giúp đỡ. Tôi tìm mãi ko thấy trên tài liệu.
<*kakalot*>
kid08 viết 02:31 ngày 10/10/2018
chỉ có cách đưa vào dạng int(10) mới so sánh đc thôi bạn à, cho nên khi đưa vào bạn dùng time()
giaodichhk viết 02:32 ngày 10/10/2018
<?php
$day = 4;
$basedate = strtotime("2007-12-30");
$date1 = strtotime("+$day days", $basedate);
echo date("Y-m-j", $date1);
?>
zoejoe viết 02:18 ngày 10/10/2018
Với PHP, tốt hơn hết là quản lí thời gian với timestamp sẽ hay nhất

PS : dạo này ddth bị DDOS hay sao ấy mà vô chậm quá :|
Bài liên quan
0