Làm cách nào để so sánh hai lần trong PHP?

Mẹo để thao tác và so sánh ngày và giờ trong PHP là lưu trữ các giá trị ngày/giờ trong một biến số nguyên và sử dụng các hàm mktime(), date() và strtotime(). Biểu diễn số nguyên của ngày/giờ là số giây kể từ nửa đêm, 1970-Jan-1, được gọi là 'kỷ nguyên'. Khi ngày/giờ của bạn ở dạng số nguyên, bạn sẽ có thể so sánh nó một cách hiệu quả với các ngày khác cũng ở dạng số nguyên

Nội dung chính Hiển thị

Tất nhiên, vì rất có thể bạn sẽ nhận được các giá trị ngày/giờ từ các yêu cầu trang và truy vấn chọn cơ sở dữ liệu nên bạn sẽ cần chuyển đổi chuỗi ngày/giờ của mình thành một số nguyên trước khi có thể thực hiện bất kỳ phép so sánh hoặc số học nào

Giả sử bạn chắc chắn rằng các biến $resttimefrom và $resttimeto chứa thời gian được định dạng đúng, bạn có thể sử dụng hàm strtotime() để chuyển đổi thời gian chuỗi của bạn thành một số nguyên. strtotime() lấy một chuỗi có định dạng là ngày tháng và chuyển đổi nó thành số giây kể từ kỷ nguyên

$time_from = strtotime($resttimefrom);
$time_to = strtotime($resttimeto);

lưu ý bên lề. strtotime() luôn trả về ngày đầy đủ ở dạng số nguyên. Nếu chuỗi của bạn không có ngày tháng, chỉ có thời gian, strtotime() trả về ngày hôm nay cùng với thời gian bạn đã cung cấp trong chuỗi. Tuy nhiên, điều này không quan trọng đối với bạn vì hai ngày được trả về bởi strtotime() sẽ có cùng một ngày và việc so sánh hai biến sẽ có tác dụng mong muốn là so sánh hai thời điểm khi các ngày triệt tiêu lẫn nhau

Khi bạn so sánh hai số nguyên, hãy nhớ rằng ngày/giờ càng sớm thì giá trị số nguyên của nó sẽ càng nhỏ. Vì vậy, nếu bạn muốn xem liệu $time_from có ​​sớm hơn $time_to hay không, bạn sẽ có cái này

if ($time_from < $time_to)
{
    // $time_from is ealier than $time_to
}

Bây giờ để so sánh ngày/giờ với ngày/giờ hệ thống hiện tại, chỉ cần sử dụng mktime() không có tham số để biểu thị ngày/giờ hiện tại

if ($time_from < mktime())
{
    // $time_from is in the past
}

Mẹo để thao tác và so sánh ngày và giờ trong PHP là lưu trữ các giá trị ngày/giờ trong một biến số nguyên và sử dụng các hàm mktime(), date() và strtotime(). Biểu diễn số nguyên của ngày/giờ là số giây kể từ nửa đêm, 1970-Jan-1, được gọi là 'kỷ nguyên'. Khi ngày/giờ của bạn ở dạng số nguyên, bạn sẽ có thể so sánh nó một cách hiệu quả với các ngày khác cũng ở dạng số nguyên

Tất nhiên, vì rất có thể bạn sẽ nhận được các giá trị ngày/giờ từ các yêu cầu trang và truy vấn chọn cơ sở dữ liệu nên bạn sẽ cần chuyển đổi chuỗi ngày/giờ của mình thành một số nguyên trước khi có thể thực hiện bất kỳ phép so sánh hoặc số học nào

Giả sử bạn chắc chắn rằng các biến $resttimefrom và $resttimeto chứa thời gian được định dạng đúng, bạn có thể sử dụng hàm strtotime() để chuyển đổi thời gian chuỗi của bạn thành một số nguyên. strtotime() lấy một chuỗi có định dạng là ngày tháng và chuyển đổi nó thành số giây kể từ kỷ nguyên

$time_from = strtotime($resttimefrom);
$time_to = strtotime($resttimeto);

lưu ý bên lề. strtotime() luôn trả về ngày đầy đủ ở dạng số nguyên. Nếu chuỗi của bạn không có ngày tháng, chỉ có thời gian, strtotime() trả về ngày hôm nay cùng với thời gian bạn đã cung cấp trong chuỗi. Tuy nhiên, điều này không quan trọng đối với bạn vì hai ngày được trả về bởi strtotime() sẽ có cùng một ngày và việc so sánh hai biến sẽ có tác dụng mong muốn là so sánh hai thời điểm khi các ngày triệt tiêu lẫn nhau

Khi bạn so sánh hai số nguyên, hãy nhớ rằng ngày/giờ càng sớm thì giá trị số nguyên của nó sẽ càng nhỏ. Vì vậy, nếu bạn muốn xem liệu $time_from có ​​sớm hơn $time_to hay không, bạn sẽ có cái này

if ($time_from < $time_to)
{
    // $time_from is ealier than $time_to
}

Bây giờ để so sánh ngày/giờ với ngày/giờ hệ thống hiện tại, chỉ cần sử dụng mktime() không có tham số để biểu thị ngày/giờ hiện tại

if ($time_from < mktime())
{
    // $time_from is in the past
}

1, Giới thiệu

Hôm nay tôi gặp một vấn đề về ngày tháng trong dự án của chúng tôi, theo yêu cầu thì tôi phải xóa tất cả những sản phẩm đã hết hạn trong Cơ sở dữ liệu. Mỗi sản phẩm đều có 2 cột trong DB là start_date và exp_date để lưu ngày đăng ký và ngày hết hạn quảng cáo trên trang web. Cả hai cột đều được lưu với kiểu Ngày

Nội dung chính

  • 1, Giới thiệu
  • 2, Giải pháp
  • 4, Kết luận
  • Sử dụng toán tử so sánh
  • Use function strcmp()
  • Sử dụng hàm similar_text
  • Use function levenshtein
  • Use function soundex
  • Use metaphone function
  • Người giới thiệu

Sau khi thực hiện câu truy vấn để lấy thông tin ngày hết hạn của từng sản phẩm, tôi sẽ nhận được các giá trị kiểu Ngày (yyyy-mm-dd) dưới dạng chuỗi (chuỗi). Việc tiếp theo là lấy 1 ngày làm việc để có cơ sở so sánh các ngày với nhau. tôi lấy ngày hôm nay làm việc. Vì vậy, nếu ngày hết hạn trước ngày hôm nay, tôi sẽ xóa sản phẩm đó và đảo ngược lại, sau đó tiếp tục lưu trong Cơ sở dữ liệu

2, Giải pháp

Tôi sử dụng hàm strtotime() (String to time ) trong PHP để thực thi công việc trên. Vì sao lại sử dụng hàm đó ?

  • Sau khi truy vấn cơ sở dữ liệu, kiểu Ngày trả về dưới dạng chuỗi
  • Hàm này sẽ trả về số giây bắt đầu từ 00. 00. 00 ngày 01/01/1970 đến thời điểm bạn so sánh, hiểu đơn giản là nếu bạn viết strtotime(2011-08-15) thì nó sẽ trả về tổng số giây từ 00. 00. 00 ngày 01/01/1970 đến 15/8/2011

3, Trình diễn

Mình sẽ viết 1 đoạn chương trình nhỏ để các bạn dễ hiểu hơn

 strtotime($another_date)) {
echo "Yesterday";
} else {
echo "Tomorrow";
}
?>

Kết quả trả lại là ngày mai

Аксессуары для мицубиси аутлендер 3 там

4, Kết luận

Trên đây là cách sử dụng hàm chuyển một chuỗi về dạng tháng và so sánh các ngày với nhau. Tùy theo yêu cầu mà bạn có thể tùy biến hàm này theo nhiều cách khác nhau. Để tìm hiểu sâu hơn về các hàm ngày tròn PHP , các bạn có thể đọc trên PHP Manual

Sử dụng toán tử so sánh

Cách đơn giản và thô sơ nhất là sử dụng toán tử so sánh của PHP (toán tử so sánh). Tuy nhiên, không nên sử dụng toán tử Equal (==) mà nên sử dụng toán tử Identical (===). By because == không so sánh kiểu dữ liệu và có thể dẫn đến sai lệch trong quá trình so sánh. Ta hãy xem thử ví dụ sau

Nội dung chính

  • Sử dụng toán tử so sánh
  • Use function strcmp()
  • Sử dụng hàm similar_text
  • Use function levenshtein
  • Use function soundex
  • Use metaphone function
  • Người giới thiệu

Nội dung chính

  • Sử dụng toán tử so sánh
  • Use function strcmp()
  • Sử dụng hàm similar_text
  • Use function levenshtein
  • Use function soundex
  • Use metaphone function
  • Người giới thiệu

Nội dung chính

  • Sử dụng toán tử so sánh
  • Use function strcmp()
  • Sử dụng hàm similar_text
  • Use function levenshtein
  • Use function soundex
  • Use metaphone function
  • Người giới thiệu
$input=0;< $input = 0; if('defaultpassword' == $input){ echo 'true'; } else { echo 'false'; } ?>

Viết tắt sử dụng toán tử 3 ngôi (ternary operator)

$input=0;< . 'sai';? $input = 0; echo ('defaultpassword' == $input) ? true : false; ?>

Mặc dù sử dụng 0 và mật khẩu mặc định hoàn toàn khác nhau nhưng kết quả trả về là đúng thay vì sai. Bởi vì khi PHP sẽ dập tắt ép kiểu về float để so sánh, và ép kiểu chuỗi 'mật khẩu mặc định' về kiểu float thì nó sẽ đưa ra kết quả như sau. int(0);

Do đó khi so sánh 2 chuỗi 1e3 và 1000 bằng phép toán == ta được kết quả đúng

echo('1e3'= . 'false';?> echo ('1e3' == '1000') ? 'true' : 'false'; ?>

Nhưng nếu dùng toán tử === ta sẽ có kết quả là sai

echo('1e3'= . 'false';?> echo ('1e3' === '1000') ? 'true' : 'false'; ?>

Do 1e3 tương đương 1000 if as convert sang float type. Vì vậy tốt hơn hết là ta dùng toán tử Identical (===) để so sánh hai chuỗi

Use function strcmp()

int strcmp ( string $str1 , string $str2 ) Nhận hai tham số $str1 và $str2 và trả về kết quả

  1. < 0 if as $str1 < $str2
  2. > 0 if as $str1 > $str2
  3. 0 if as $str1 = $str2

Đây là một hàm an toàn nhị phân, tức là nhận dữ liệu đầu vào dưới dạng dữ liệu thô mà không dừng kiểu dữ liệu. And strcmp function only so sánh nội dung của hai chuỗi mà không phải so sánh địa chỉ bộ nhớ và bỏ qua các ký tự đặc biệt. Lưu ý thêm là hàm này có phân biệt hoa thường, nhưng hàm strcasecmp thì không

Ví dụ. Hai chuỗi “string1” và “string1\0\n”, hiển thị không giống nhau. Nếu sử dụng toán tử so sánh ở trên để tra cứu thì tất nhiên kết quả trả về sẽ là ‘false’. Tuy nhiên, nếu sử dụng hàm strcmp, ta sẽ nhận được kết quả là đúng vì nội dung hai chuỗi này hoàn toàn giống nhau nếu bỏ qua các ký tự đặc biệt trong PHP là \0 và\n. tiếng vang (strcmp('string1', 'string1\0\n')) ? . 'sai';

Nhưng lưu ý là PHP có một lỗi như sau. Nếu dùng strcmp để so sánh giữa một mảng() và một chuỗi thì kết quả trả về vẫn là 0 (tức là hai “chuỗi” bằng nhau)

$pwd=isset(< . '';//tương đương $pwd = array(); . ';}?> Cảnh báo. strcasecmp() dự kiến ​​tham số 1 là chuỗi, mảng được cho trong cmpstr. php trên dòng 12 $pwd = isset($_GET[pwd]) ? $_GET[pwd] : ''; //tương đương $pwd = array(); if ( strcasecmp( $pwd, 'password' ) == 0 ){ echo 'You successfully logged in.'; } ?> Warning: strcasecmp() expects parameter 1 to be string, array given in cmpstr.php on line 12

Mặc dù nó vẫn bung ra Warning as it vẫn vượt qua được ở bên trong và đưa ra câu thông báo. ”Bạn đã đăng nhập thành công”

Sử dụng hàm similar_text

int similar_text ( string $first , string $second [, float &$percent ] )

Hàm similar_text nhận 3 tham số, 2 chuỗi đầu vào và một biến chứa kết quả trả về. Kết quả là phần trăm giống nhau giữa hai chuỗi. Ví dụ

similar_text("Xin chào thế giới" similar_text("Hello World","Hello Hello",$percent); echo $percent; ?>

Kết quả trả về là 63. 636363636364 Theo tài liệu của PHP, hàm này tính toán sự giống nhau giữa hai chuỗi được mô tả trong sách Lập trình cổ điển. Triển khai các thuật toán tốt nhất thế giới của Oliver (ISBN 0-131-00413-1)

Tuy nhiên, thứ tự của các tham số cũng làm thay đổi kết quả trả về, và ví dụ dưới đây được báo cáo là một lỗi nhưng chưa được xác nhận

echosimilar_text('test' echo similar_text('test','wert'); // 1 echo similar_text('wert','test'); // 2 hay $var_1 = 'PHP IS GREAT'; $var_2 = 'WITH MYSQL'; echo similar_text($var_1, $var_2); // 3 echo similar_text($var_2, $var_1); // 2 ?>

Use function levenshtein

Hàm này đảo ngược với hàm similar_text(), nó sẽ trả về 0 nếu như hai chuỗi so sánh giống nhau

intlevenshtein(chuỗi int levenshtein ( string $str1 , string $str2 ) int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del ) ?>

Hàm này tính khoảng cách levenshtein (hay còn gọi là Khoảng cách chỉnh sửa) giữa 2 dãy (dãy) và được đặt tên theo một nhà khoa học người Nga Vladimir Levenshtein, người đã đưa ra ý tưởng tưởng tượng này vào năm 1965. Khoảng cách levenshtein được tính bằng cách tính số lần xóa (xóa), thêm (chèn) và thay thế (thay thế) để chuyển chuỗi gốc (nguồn) thành chuỗi đích (đích)

Ví dụ. Khoảng cách Levenshtein giữa 2 chuỗi “kitten” và “sitting” là 3, vì phải sử dụng ít nhất 3 lần biến

  • mèo con -> ngồi (thay “k” bằng “s”)
  • sitten -> sittin (thay “e” bằng “i”)
  • sittin -> sit (thêm ký tự “g”)
echolevenshtein("kitten" echo levenshtein("kitten","sitting");//3 ?>

Use function soundex

chuỗi soundex ( chuỗi $str )

Hàm này sử dụng thuật toán ngữ âm (thuật toán ngữ âm) để tính toán chỉ mục của các tự nhiên dựa trên cách phát âm của nó (theo tiếng Anh). Hàm này trả về một chuỗi 4 ký tự bắt đầu với một chữ cái. Thuật toán này được mô tả trong cuốn sách nổi tiếng The Art Of Computer Programming, vol. 3. Sắp xếp và Tìm kiếm”, Addison-Wesley (1973), trang. 391-392 của Donald Knuth

Ví dụ. Trong MySQL có một chức năng tương tự soundex. Ta có thể sử dụng hàm này để đưa ra một từ khóa tìm kiếm gần đúng. Ta save in database 1 field soundex, to so sánh với từ khóa người dùng đưa vào

CHỌN p. tên TỪ sản phẩm p WHERE p. soundex = SOUNDEX('kiểm tra');

Use metaphone function

chuỗi metaphone ( string $str [, int $phonemes = 0 ] )

Theo tài liệu PHP, hàm này tương tự như soundex nhưng chính xác hơn vì dựa trên nguyên tắc phát âm cơ bản trong tiếng Anh. And this function return a key with the length instead of change the length of the input string. Thuật toán này được phát triển bởi Lawrence Philips và được mô tả trong cuốn sách “Thuật toán thực hành dành cho lập trình viên”, Binstock & Rex, Addison Wesley, 1995

var_dump(siêu điện thoại( var_dump(metaphone('Catherine')); var_dump(metaphone('Katherine')); //string(5) "K0RN" //string(5) "K0RN" ?>

Trong khi sử dụng hàm soundex sẽ trả về 2 kết quả khác nhau C365 (Catherine) và K365 (Katherine). Ở đây ta có thể thấy tại sao metaphone hàm được mô tả là chính xác hơn hàm soundex, theo nghĩa nó có ích hơn vì trên thực tế hai Katherine và Catherine đọc hoàn toàn giống nhau. Cũng tương tự như soundex, ta có thể sử dụng hàm metaphone để tăng khả năng tìm kiếm trong cơ sở dữ liệu

Làm cách nào để so sánh hai lần trong PHP?

So sánh hai ngày trong PHP rất đơn giản khi cả hai ngày đều có cùng định dạng nhưng vấn đề phát sinh khi cả hai ngày có định dạng khác nhau. Phương pháp 1. Nếu các ngày đã cho có cùng định dạng thì hãy sử dụng toán tử so sánh đơn giản để so sánh các ngày . echo "$date1 cũ hơn $date2" ;

Làm cách nào để so sánh chỉ thời gian trong PHP?

Không so sánh các chuỗi đại diện cho dấu thời gian. Thay vào đó, hãy sử dụng strtotime() để chuyển đổi bất kỳ chuỗi nào như vậy thành dấu thời gian Unix, vốn chỉ là số và sau đó so sánh các chuỗi này . Bạn có thể lấy dấu thời gian Unix cho thời điểm hiện tại với time(). $my_time = '19. 30'; . }

Làm cách nào để so sánh ngày và giờ hiện tại với ngày và giờ khác trong PHP?

Bạn có thể PHP so sánh hai ngày có định dạng khác nhau bằng cách sử dụng các đối tượng DateTime. Bạn có thể so sánh ngày PHP với ngày hiện tại bằng cách sử dụng hàm strtotime() cùng với các toán tử so sánh . Hàm date_diff() cho phép bạn so sánh hai ngày và tìm sự khác biệt giữa chúng.