Hướng dẫn dùng abs extension trong PHP

Bài viết hôm nay sẽ giải quyết câu hỏi làm thế nào tính được khoảng cách giữa 2 ngày bất kỳ và lấy kết quả trả về theo các mục đích khác nhau.

1) Tính khoảng cách giữa 2 ngày

Thuật toán được mô tả như sau :

  1. Dùng hàm strtotime() để tính ra số giây được tính từ thời điểm 01/01/1970 00:00:00 GMT đến hiện tại của 2 ngày được nhập vào.
  2. Dùng hàm abs() để lấy giá trị tuyệt đối của hiệu 2 ngày đó (vì không biết ngày nào lớn hơn).
  3. Lấy kết quả chia cho tổng số giây trong 1 ngày (24 x 60 x 60 = 86400).
  4. Cuối cùng sử dụng hàm floor() để làm tròn số ngày trả về.

Và đây là đoạn code:

<?php
$first_date = strtotime('2012-07-11');
$second_date = strtotime('2012-07-14');
$datediff = abs($first_date - $second_date);
echo floor($datediff / (60*60*24));
?>

Kết quả:

3

2) Lấy kết quả trả về theo định dạng ngày, tháng, năm

Các bạn có thể thấy kết quả trả về của đoạn code ở trên là khoảng cách (số ngày) giữa 2 ngày nhập vào. Câu hỏi đặt ra làm thế nào tính chính xác khoảng cách đó ra ngày, tháng, năm. Nói một cách dễ hiểu là, giả sử tôi nhập vào 2 ngày là 01/01/2012 và 04/05/2014. Vậy hai ngày đó cách nhau bao nhiêu năm, tháng và ngày ?

a, Cách 1

<?php
$date1 = "2012-03-24";
$date2 = "2012-03-26";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
echo $years . " years, " . $months . " months, " . $days . " days";
?>

b, Cách 2 (Đoạn code này chỉ áp dụng cho PHP 5.3+)

<?php
$date1 = new DateTime("2012-03-24");
$date2 = new DateTime("2012-03-26");
$interval = $date1->diff($date2);
echo $interval->y . " years, " . $interval->m . " months, " . $interval->d . " days ";
?>

Và kết quả

0 years, 0 months, 2 days

3) Lấy kết quả trả về theo định dạng ngày, tháng, năm, giờ, phút, giây

Tương tự như vậy, đoạn code dưới đây sẽ tính chính xác khoảng cách giữa 2 ngày ra định dạng ngày, tháng, năm, giờ, phút, giây.

Internet TV

<?php
$date1 = "2008-11-01 22:45:00";
$date2 = "2009-12-04 13:44:01";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24) / (60*60*24));
$hours = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24) / (60*60));
$minutes = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60) / 60);
$seconds = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));
echo $years." years, ".$months." months, ".$days." days, ".$hours." hours, ".$minutes." minutes, ".$seconds." seconds";
?>

Và kết quả

1 years, 1 months, 2 days, 14 hours, 59 minutes, 1 seconds

Hi vọng bài viết này giúp ích cho các bạn. Thân ái!

Bài toán như sau. Tôi cần làm một ứng dụng quản lý bán hàng cho nhân viên nhập đơn, dĩ nhiên người ta cần thông tin về sản phẩm.  Điều quan trọng là người nhập cần nhập đúng tên sản phẩm và giá của nó. Dĩ nhiên người này chẳng thể nhớ nối giá rất nhiều hàng hoá mà mình bán, người ấy cần được gợi ý từ chương trình tự động. Đồng thời chương trình này sẽ: Làm cho thao tác nhanh hơn vì rút ngắn thời gian gõ tên sản phẩm Hạn chế hoàn toàn tình trạng nhớ …

Đọc thêm

Xửa lý số điện thoại có thể là yêu cầu quan trọng trong nhiều bài toán. Đặc biệt là những bài toán liên quan đến con người, thí dụ số điện thoại nhân viên trong công ty, số điện thoại khách hàng của bạn, số điện thoại những người bạn muốn chào hàng, số điện thoại của người dân trong quận huyện, v.v… Tại sao phải chuẩn hoá? chuẩn hoá ở đâu? Số điện thoại được lưu trong cơ sở dữ liệu. Trước khi người ta lưu người ta sẽ phải nhập dữ liệu vào. Sau khi người ta lưu …

Đọc thêm

Các ứng dụng web bằng PHP có một số đặc điểm sau: Thường phức tạp Thường có nhiều trang (nhiều code) / vì phức tạp nên thế Thường có nhiều người làm (hoặc/và làm vào các giai đoạn khác nhau) Thường được bổ sung tính năng hoặc/và loại bỏ bớt tính năng Thường xuyên được sửa chữa để tối ưu Điều này dễ gây nhầm lẫn, bối rối, tốn thời gian và bực mình. Cách khắc phục: Xác định rõ ràng mục tiêu của trang Xác định đối tượng phục vụ Xác định giao diện của trang Có bảng mô tả …

Đọc thêm

Mặc dù được đào tạo về PHP nhưng tôi không phải lập trình viên chuyên nghiệp. Tuy nhiên một số dự án buộc phải dùng đến code đã đem lại một số kinh nghiệm tôi muốn kể lại cho các bạn – đây cũng đồng thời là cách để chính tôi sáng rõ hơn. A. Rõ ràng nhất có thể về cái cần giải quyết Khi chúng ta code có nghĩa là để giải quyết một vấn đề nào đó. Đó có thể là một trò chơi hay ứng dụng web giúp đỡ mọi người tìm cây ATM gần nhất. …

Đọc thêm

Hàm date() trong PHP được sử dụng để định dạng ngày và thời gian. Hàm Date() Hàm date() được dùng để định dạng một nhãn thời gian giúp cho việc đọc dữ liệu ngày và thời gian trở nên đơn giản hơn. Cú pháp: Tham số Mô tả Định dạng (format) Yêu cầu. Chỉ định định dạng của nhãn thời gian Nhãn thời gian (timestamp) Tùy chọn. Chỉ định một nhãn thời gian cụ thể. Theo mặc định là ngày và thời gian hiện tại Một nhãn thời gian là một chuỗi các ký tự, biểu thị ngày tháng và / …

Đọc thêm

PHP 5 và các phiên bản về sau làm việc với cơ sở dữ liệu MySQL thông qua hai phương pháp: MySQLi extension (chữ i viết tắt cho từ cải tiến / improved); PDO (PHP Data Objects); Các phiên bản trước đây của PHP sử dụng MySQL extension (không có i). Tuy nhiên, phần mở rộng này không được tán thành từ năm 2012. Vậy tôi nên sử dụng MySQLi hay PDO Nếu bạn cần câu trả lời nhanh gọn thì đó là: “Tùy vào bạn thích cái nào hơn!” Cả MySQLi và PDO đều có những lợi thế riêng. …

Đọc thêm

Hai hàm này có chức năng như nhau, dùng để tạo các số ngẫu nhiên. Điểm khác biệt duy nhất là hàm mt_rand() nhanh hơn 4 lần so với hàm rand(). Và không gian ngẫu nhiên của nó cũng rộng hơn. Cú pháp: rand(): sẽ cho ra một số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 32767 (còn gọi là  getrandmax); mt_rand(): sẽ cho ra số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 2147483647 (còn gọi là mt_getrandmax); rand(min, max): min, max là tùy chọn. Kết quả sẽ cho ra số ngẫu nhiên trong …

Đọc thêm

Hàm abs() dùng để lấy giá trị tuyệt đối của một giá trị. Nếu còn nhớ môn toán hồi cấp 2, bạn sẽ hiểu giá trị tuyệt đối là gì. Dành cho những ai chưa rõ: Giá trị tuyệt đối của 0 là 0 Giá trị tuyệt đối của một số dương A là chính số A đó Giá trị tuyệt đối của số âm X là số dương Y sao cho X + Y = 0 Ví dụ giá trị tuyệt đối của 3 là 3, của – 2.5 là 2.5 Cú pháp trong PHP: Thông tin kỹ thuật: Trả …

Đọc thêm

Trong PHP bạn có đầy đủ các hàm sắp xếp mảng, điều đó có nghĩa là bình thường khi cần thiết bạn sẽ áp dụng các hàm đó thôi, để tiết kiệm thời gian và công sức – không phải gõ code thuần để làm lại việc này nữa. Bạn lại hỏi mình, thế bài viết này có ý nghĩa gì? Câu trả lời là: luyện tư duy. Điều quan trọng nhất trong lập trình đó là tư duy và chăm chỉ, cả hai cái đều bổ sung cho nhau rất tốt. Nếu có tư duy đúng bạn có thể chuyển …

Đọc thêm

Biến siêu toàn cục được giới thiệu lần đầu trong PHP phiên bản 4.1.0, nó được xây dựng để cung cấp sẵn trong mọi trường hợp. Biến toàn cục – siêu toàn cục trong PHP Một số biến được xác định trước trong PHP là siêu toàn cục, điều này có nghĩa là nó luôn luôn được truy cập, không giới hạn – và bạn có thể truy cập nó trong bất cứ hàm nào, lớp nào hoặc file mà không cần làm điều gì đặc biệt Những biến siêu toàn cục trong PHP là: $GLOBALS $_SERVER $_REQUEST $_POST $_GET …

Đọc thêm

Điều hướng bài viết