Ngày php sửa đổi ngày đầu tiên của tháng
Có một số niềm vui khi chụp ảnh trong Công viên Regent's. Chú chim đáng yêu này khá bối rối với thứ băng giá này. … https. //t. co/LBhLFb52JR Show twitter — Ngày 19 tháng 1, 23. 06 UTC tôi đi bộ 10. 9km trong 1h48m47s người chạy — ngày 19 tháng 1, 12. 51 UTC Lấy tháng tiếp theo bằng PHP London, Vương quốc Anh Thứ sáu, ngày 08 tháng 01 năm 2010, ngày 09. 13 giờ GMT Người dùng PHP hết lần này đến lần khác phàn nàn rằng modify( 'next month' ); echo $d->format( 'F' ), "\n"; ?> Đầu ra của tập lệnh nhỏ sẽ là format( 'F jS, Y' ), "\n"; ?>0. Tháng 3 rõ ràng không theo sau tháng 1 vì tháng 2 ở giữa. Tuy nhiên, hành vi hiện tại là đúng. Điều sau đây xảy ra trong nội bộ
Có thể dễ dàng nhận thấy điều này khi lặp lại ngày với định dạng ngày đầy đủ, định dạng này sẽ xuất ra format( 'F jS, Y' ), "\n"; ?>4 format( 'F jS, Y' ), "\n"; ?> Để có được hành vi chính xác, bạn có thể sử dụng một số PHP 5. Chức năng mới của 3 giới thiệu khổ thơ thời gian tương đối format( 'F jS, Y' ), "\n"; ?>5. Khổ thơ này có thể được sử dụng kết hợp với next month , format( 'F jS, Y' ), "\n"; ?>7 hoặc format( 'F jS, Y' ), "\n"; ?>8 để đi đến ngày đầu tiên của tháng được chỉ định. Thay vì next month từ ví dụ trước, chúng tôi sử dụng modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; ?>0 ở đây modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; ?> Tập lệnh này sẽ xuất chính xác modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; ?>1. Những điều sau đây xảy ra khi PHP xử lý đoạn thơ modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; ?>0 này
Bên cạnh format( 'F jS, Y' ), "\n"; ?>5, có một modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; ?>9 tương đương để đi đến ngày cuối cùng của một tháng. Ví dụ sau minh họa điều này modify( 'last day of next month' ); echo $d->format( 'F jS, Y' ), "\n"; ?> Điều này xuất ra modify( 'last day of next month' ); echo $d->format( 'F jS, Y' ), "\n"; ?>0. Nội bộ sau đây xảy ra
Tôi hy vọng điều này sẽ làm sáng tỏ một số hành vi xử lý Ngày/Giờ của PHP. Để biết thêm thông tin về Lập trình Ngày/Giờ với PHP, vui lòng tham khảo cuốn sách của tôi "php. Architect's Guide to Date and Time Programming" có sẵn trên Amazon liên kết rút gọnBài viết này có sẵn một URL ngắn. https. //drck. tôi/otnmi-php-7q7 Bình luậnAnthony Thứ sáu, ngày 08 tháng 01 năm 2010, ngày 09. 44 UTC Điều gì xảy ra nếu bạn không thể sử dụng PHP 5. 3? Derick Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 10. 03 UTC @Anthony. Trước hết, không cần sửa chữa, vì không có lỗi. Nhưng tất nhiên bạn có thể làm điều này trong các phiên bản PHP khác theo một cách khác. Với PHP5. 2 chẳng hạn setDate( $d->format( 'Y' ), $d->format( 'm' ), 1 ); $d->modify( 'next month' ); echo $d->format( 'F' ), "\n"; ?> Dòng thứ ba (có modify( 'last day of next month' ); echo $d->format( 'F jS, Y' ), "\n"; ?>6 trên đó), sử dụng năm và tháng hiện tại và đặt ngày thành 1 trước khi chuyển sang tháng tiếp theo với cuộc gọi modify( 'last day of next month' ); echo $d->format( 'F jS, Y' ), "\n"; ?>7 ken Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 18. 26 UTC tôi có ý kiến khác. Tôi không chắc nhóm PHP đã hút thuốc gì nữa, nhưng rõ ràng đó là một số thứ tuyệt vời Về mặt ngữ nghĩa, "tháng tới" NÊN, theo nghĩa đen, là tháng tới. Chuyện gì đã xảy ra với KISS? . Khi tôi nói với gia đình rằng tôi sẽ đến thăm họ vào "tháng tới", KHÔNG có sự nhầm lẫn về việc đó sẽ là tháng nào; . Hành vi mà bạn đang mô tả ở đây sẽ được mô tả đầy đủ hơn là "một tháng kể từ bây giờ" tôi yêu nó mặc dù. Đây là một ví dụ tuyệt vời khác về việc các nhà phát triển quá khoa trương vì lợi ích của họ; . Bạn có nhận ra bao nhiêu giờ lao động sẽ bị lãng phí (và theo đó là tiền), không chỉ bên ngoài nhóm PHP mà còn trong nhóm PHP, do 'không có lỗi' này không? Derick Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 19. 03 UTC @Ken. Chà, chà, có vẻ như bạn biết tất cả mọi thứ nhỉ?. Đầu tiên một số sự thật
Mục tiêu của hỗ trợ chuỗi tương đối là cung cấp một ngôn ngữ phong phú và nhất quán. Và đó chính xác là những gì nó là. Bạn có thể không thích, nhưng bạn không thể tranh cãi rằng hành vi đó là không đúng. Nó đúng bởi vì nó rõ ràng đã được thiết kế như nó vốn có (tuân theo một số thông số kỹ thuật của GNU) PHP5. 3 thêm một phạm vi hoàn toàn mới của các khổ thơ chuỗi tương đối chỉ vì không phải lúc nào bạn cũng có thể diễn đạt ngày mà bạn muốn. Với đoạn thơ format( 'F jS, Y' ), "\n"; ?>5 mới, giờ đây ít nhất bạn có thể đến được ngày mà bạn mong đợi ken Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 19. 45 UTC 1. Điều này không làm cho người dùng mới dễ dàng hơn 2. 3. Tôi có phải là người duy nhất nhìn thấy sự trớ trêu trong tuyên bố này? Derick, xin đừng hiểu sai ý tôi ở đây, tôi không cố xúc phạm bạn (và tôi xin lỗi nếu tôi có); . Rốt cuộc, tôi đã đăng ký qua RSS và sử dụng xdebug thường xuyên. Tuy nhiên, chính những thứ như thế này lại khiến PHP trở nên khó chịu voi Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 20. 31 UTC Ken có lý. Ví dụ, hướng dẫn sử dụng strtotime có nội dung 'Parse about any textual datetime description'. Việc giải thích văn bản tiếng Anh của 'tháng tới' sẽ là tháng hai. Lý tưởng nhất là không có một ngày. Vì chúng ta không thể có ngày mà không có ngày (nhân tiện, tại sao chúng ta không thể? Con người có khả năng xử lý các biểu thức ngày ít hơn ngày), tôi sẽ nói 'weg van de minste verbazing' như chúng ta nói bằng tiếng Hà Lan Tái bút. nút gửi của bạn nói 'gửi' ;-) Rasmus Thứ sáu, ngày 8 tháng 1 năm 2010, ngày 23. 54 UTC Tôi tự hỏi liệu những người phàn nàn có nhận ra rằng đây không phải là thứ dành riêng cho PHP không. Bạn có lẽ nên đọc cái này Dù tốt hay xấu, đây là quy ước UNIX để cộng và trừ các khoảng thời gian (không chỉ tháng). Công cụ ngày dòng lệnh trên hộp UNIX của bạn hoạt động giống hệt nhau Micheal Stillwell Thứ bảy, ngày 09 tháng 01 năm 2010, ngày 01. 05 UTC SQLite cũng hoạt động theo cùng một cách sqlite> select datetime('2010-01-31', '+1 month'); 2010-03-03 00:00:00 sqlite> select datetime('2010-01-31', 'start of month', '+1 month'); 2010-02-01 00:00:00 The documentation also explains this quite well Vincenzo Thứ bảy, ngày 09 tháng 01 năm 2010, ngày 01. 31 UTC chào mọi người @Derick. trong các bình luận bạn nói không cần sửa vì không có lỗi. Tuy nhiên, trong bài đăng bạn nói 'Để có được hành vi chính xác', ngụ ý rằng hành vi mặc định là sai. Dù sao, tôi chỉ là một người mô phạm @Tất cả các. Tôi thừa nhận nó là khó hiểu ngay từ cái nhìn đầu tiên. Developer suy cho cùng vẫn là con người Nhưng sau khi suy nghĩ một chút về nó, dù sao, tôi thấy hành vi "sửa đổi ('tháng tới')" đúng, bởi vì những gì nó đang làm là lấy ngày hiện tại (vì vậy ngày đầy đủ, không chỉ tháng hiện tại) và sửa đổi Do đó, vấn đề thực sự là không ai nên sử dụng THAT để tính tháng tiếp theo với ngày hiện tại. Chức năng đó gọi rõ ràng là không dành cho điều đó. Nó có nghĩa là để tăng ngày hiện tại theo một tháng mặt trời. chuyện hoàn toàn khác Nếu nó giống như "getNextMonthFromCurrentDate($date)" và nó vẫn hoạt động như "sửa đổi('next month')", thì tôi đã tự phàn nàn rồi Dù sao, để hoàn toàn mô phạm, nếu có bất cứ điều gì sai (điều này gây hiểu lầm cho các nhà phát triển ngay từ cái nhìn đầu tiên) thì đó là ngữ nghĩa. "Tháng tới" đó phải là "+1 tháng" hoặc những thứ tương tự (như 'ngày', như Rasmus đã chỉ ra một cách chính xác) Nhưng tôi xin nhắc lại, ngay cả với ngữ nghĩa sai, không có cách nào bạn có thể biện minh khi nghĩ rằng đó là chức năng bạn nên sử dụng để có được tháng tiếp theo Dù sao đi nữa, đối với PHP <5. 3 người dùng, trang được liên kết bởi Rasmus giúp. "Để xác định tháng trước chính xác hơn, bạn có thể hỏi tháng trước ngày 15 của tháng hiện tại. " Tôi tự hỏi, dù sao đi nữa, nói về những con số, chúng ta không thể nói $nextmonth = ($currentmonth % 12) + 1; ? ken Thứ bảy, ngày 09 tháng 01 năm 2010, ngày 02. 09 UTC @Rasmus Lerdorf?. ) Mặc dù tôi thừa nhận rằng nhiều người thông minh hơn tôi đã phát triển GNU (và PHP), nhưng điều đó không thay đổi được thực tế là nếu bạn thăm dò ý kiến của 100 người không phải là nhà phát triển ngoài đường hôm nay về tháng tới, thất bại trong việc mù chữ, bạn sẽ nhận được phản hồi 100%. . Đó là quan điểm của tôi, rằng không nên có một thực tế bị thay đổi để lập trình Tôi nhận ra rằng nhiều khái niệm trọng tâm của PHP bắt nguồn từ các hệ thống khác, và vâng, nó làm cho việc lập trình bằng PHP trở nên dễ dàng hơn đối với các nhà phát triển đã quen thuộc với các hệ thống nói trên, nhưng đối với các lập trình viên mới làm quen chưa quen với các hệ thống nói trên thì sao? @Michael Không, điều đó không áp dụng ở đây và nó thực sự hỗ trợ cho tuyên bố trước đây của tôi rằng hành vi được quan sát gần giống với "một tháng kể từ bây giờ" (hay còn gọi là. "+1 tháng") so với "tháng tiếp theo". Ngoài ra, điều gì xảy ra khi bạn thay thế 2010-01-31 trong lệnh thứ hai bằng 2010-02-28? Vì vậy, để không trở thành một người chỉ đơn giản là chỉ trích mà không đưa ra giải pháp, do đó, tôi nghĩ rằng một giải pháp tốt hơn (mặc dù có lẽ không phải là tốt nhất) sẽ chỉ đơn giản là chuyển ngày sang ngày đầu tiên của tháng tiếp theo. Nếu bạn muốn thêm 31 ngày vào một ngày, thì đã có 2 cách để làm điều đó, phải không? Tuy nhiên, tôi cho rằng không có câu trả lời 'dễ dàng' nào cho vấn đề này và đã có nhiều suy nghĩ về vấn đề này, vì vậy tôi sẽ để nó ở đây. Tôi không nghĩ rằng sự lan man của tôi sẽ thực sự thay đổi bất cứ điều gì. ) ken Thứ bảy, ngày 09 tháng 01 năm 2010, ngày 02. 13 giờ UTC @Vincenzo Thực ra không phải là tháng dương lịch, một tháng dương lịch xấp xỉ 30 ngày (30 ngày, 10 giờ, 29 phút, 3. 8 giây theo một nguồn) và "tháng tới" dường như sử dụng 31 ngày cố định Rasmus Thứ bảy, ngày 09 tháng 01 năm 2010, ngày 02. 54 UTC Tháng dương lịch? Nó chỉ đơn giản là tăng tháng. Vì vậy, hôm nay là ngày 8 tháng 1. "+1 tháng" hoặc "tháng tiếp theo" sẽ mang đến cho bạn ngày 8 tháng 2. Mà trong trường hợp này là ok. Tuy nhiên, nếu chúng tôi làm điều này vào ngày 29, 30 hoặc 31 tháng 1 khi chúng tôi tăng tháng, chúng tôi sẽ nhận được một ngày không tồn tại trong tháng Hai, vì vậy chúng tôi sẽ sửa nó bằng cách chuyển số ngày thích hợp sang tháng Ba Cho dù đây là cách đúng đắn để làm điều đó hay không là điều gây tranh cãi. Bạn có thể tranh luận cả hai mặt của điều đó một cách dễ dàng, nhưng đến một lúc nào đó, ai đó đã quyết định rằng đây là cách nó sẽ diễn ra và mọi người đã làm theo điều đó. Theo quan điểm của bạn, nó có thể sai, nhưng ít nhất sau đó nó sai một cách nhất quán và có thể đoán trước được. Giống như các ngôn ngữ nói như tiếng Anh. Có rất nhiều điều vốn dĩ không ổn với ngôn ngữ này, nhưng một khi bạn học nó, nó sẽ cảm thấy tự nhiên và hiệu quả Vincenzo Thứ bảy, ngày 9 tháng 1 năm 2010, ngày 10. 23 UTC Quên tháng dương lịch rồi Đó không phải là điểm mặc dù. Điểm mấu chốt là. chức năng đó, tuy nhiên nó hoạt động, không nên được sử dụng để nhận chỉ trong tháng tới, đây là một vấn đề đơn giản hơn. Hàm thao tác toàn bộ ngày. Bạn cần biết tháng liền kề với tháng hiện tại là gì Micheal Stillwell Thứ bảy, ngày 9 tháng 1 năm 2010, ngày 13. 06 UTC @ken Thật ra thì có sqlite> select datetime('2010-02-28', 'start of month', '+1 month'); 2010-03-01 00:00:00 Tôi nghĩ rằng cách tiếp cận của SQLite (với các lệnh riêng biệt được áp dụng theo trình tự và các công cụ sửa đổi ngày dạng số thay vì "tiếp theo", "trước đó") rõ ràng hơn 5. 3 và tạo ra nhiều hành vi dễ dự đoán hơn, vì có ít gợi ý hơn rằng nó sẽ làm theo ý bạn một cách kỳ diệu, trong đó ý bạn muốn nói thực sự có thể mơ hồ. Tuy nhiên, như Rasmus nói, nếu bạn đã quen thuộc với các công cụ Unix khác và cách chúng hoạt động với các ngày tương đối, bạn sẽ mong đợi PHP hoạt động theo cách của nó. ngoại lệ e Thứ bảy, ngày 9 tháng 1 năm 2010, ngày 22. 35 UTC Đây chính là lý do tại sao tôi luôn hơi lo lắng khi gõ ngày tháng theo phong cách tự nhiên. "Liệu hệ thống có hiểu những gì tôi nghĩ nó sẽ hiểu không?" Tôi đã có một khoảnh khắc wtf khi tôi thấy rằng tháng tiếp theo sẽ dẫn đến tháng tiếp theo. Sẽ hợp lý hơn một chút nếu những người phát minh ra hệ thống này quyết định đặt các ngày còn lại lên trên, để thay vào đó bạn có 28 tháng 2 Tôi thích việc Derick tuân theo tiêu chuẩn kỳ lạ này. Tôi đã học được rằng theo một tiêu chuẩn sai còn hơn là không có tiêu chuẩn nào cả. Đã đi edaan Derick. . ) Cảm ơn vì bài viết này. Mọi người sử dụng tiện ích mở rộng này nên biết sự tinh tế này Laurent H Thứ hai, ngày 11 tháng 1 năm 2010, ngày 21. 43 UTC 1 dòng php $next_month = date("m Y", strtotime('+1 tháng')); http. //php. net/thủ công/vi/chức năng. strtotime. php Derick Thứ ba, ngày 12 tháng 01 năm 2010, ngày 08. 56 UTC @Laurent. Đó chính xác là những gì sẽ không hoạt động nếu hôm nay là ngày 30 hoặc 31 tháng Giêng Richard Thứ sáu, ngày 29 tháng 01 năm 2010, ngày 09. 36 UTC $d = Ngày giờ mới('29-01-2010'); Điều này sẽ xuất ra "ngày 2 tháng 3 năm 2010" không chính xác. Tôi thấy rằng những điều sau đây cho đầu ra chính xác tiếng vang (ngày('m') + 1 % 13); Derick Thứ sáu, ngày 29 tháng 1 năm 2010, ngày 14. 05 UTC @Richard. format( 'F jS, Y' ), "\n"; ?>5 là một cái gì đó mới trong PHP 5. 3, nơi nó chắc chắn hoạt động modify( 'first day of next month' ); echo $d->format( 'F jS, Y' ); ?> cho February 1st, 2010 Steve đất sét Thứ hai, ngày 1 tháng 3 năm 2010, ngày 23. 03 UTC FWIW, the problem here isn't PHP's consistency with the GNU API (I think that's a good thing), but just incomplete documentation: Neither strtotime nor DateTime::modify even mention that such a standard exists, let alone where to read it. A very buried user comment is not good enough. FYI, các tài liệu GNU cho biết "tiếp theo" chỉ được chuyển đổi thành "1" như trong "+1 tháng", vì vậy có lẽ không nên sử dụng thuật ngữ "tiếp theo" vì nó dẫn đến loại mơ hồ này Jason Thứ tư, ngày 31 tháng 3 năm 2010, ngày 23. 13 giờ UTC [A] Tôi đồng ý 100% với Ken rằng hành vi đó không phải là điều mà lập trình viên mong đợi [B] Mặc dù hành vi không như mong đợi, nhưng "làm theo một tiêu chuẩn sai còn tốt hơn là không có tiêu chuẩn nào cả". Bạn có thể thừa nhận rằng hành vi không phù hợp với mong đợi nhưng vẫn là lựa chọn tốt nhất với các tiêu chuẩn GNU thực tế [C] Việc thiếu tài liệu là một vấn đề thực sự. Giống như Ken đã nói, mọi người sẽ gửi lỗi chống lại điều này cho đến hết thời gian vì có vẻ như đó là một trường hợp rõ ràng về lỗi đối với lập trình viên khi họ lần đầu tiên gặp phải hành vi đó. Quan trọng hơn các lỗi đã nộp là các lỗi này gây ra trong các chương trình của người dùng cuối. Điều này hết sức khó chịu đã xảy ra với bất kỳ lập trình viên nào. Một lỗi chỉ xảy ra hai ngày một tháng trong một chương trình đang hoạt động khác. ôi. Điều này phải được đưa ra trạng thái Cảnh báo trong strtotime() trong sách hướng dẫn và bất kỳ nơi nào khác chuỗi thời gian tương đối được đề cập [D] Với sự bổ sung tuyệt vời của "ngày đầu tiên" và "ngày cuối cùng của" (cảm ơn. ) và thực tế là có các lựa chọn thay thế cho "tháng tới" và "tháng trước", "tháng tới" và "tháng trước" không được dùng nữa. Nếu chúng được sử dụng riêng lẻ (theo cách kích hoạt hành vi đầu tiên mà bạn mô tả chứ không phải hành vi thứ hai), thì người dùng sẽ nhận được cảnh báo và thông báo không dùng nữa (bất kể mức độ lỗi/quy trình thông thường trong PHP đối với chức năng không dùng nữa). Tôi không nghĩ rằng đó là một vấn đề khi loại bỏ nó trong PHP khi nó không được dùng trong libc hoặc những nơi khác. Quá trình loại bỏ chức năng không trực quan này cần phải bắt đầu ở đâu đó, cũng có thể là trong PHP. Tôi không nghĩ rằng nó nên bị xóa hoàn toàn trừ khi nó bị xóa ngược dòng, nhưng việc ngừng sử dụng vô thời hạn có vẻ hoàn toàn phù hợp Làm cách nào để có được ngày đầu tiên của tháng kể từ ngày trong php?// Dấu thời gian hiện tại được giả định, vì vậy chúng tìm ngày đầu tiên và ngày cuối cùng của tháng NÀY $first_day_this_month = date('m-01-Y'); // hard-coded '01' for first day $last_day_this_month = date('m-t-Y'); // With timestamp, this gets last day of April 2010 $last_day_april_2010 = date('m-t-Y', strtotime('April 21, 2010'));
Làm cách nào để có được ngày đầu tiên và ngày cuối cùng của tháng trước trong php?Nhận tháng trước từ ngày đã cho
. $date = "2021-12-01"; $new_date = date('Y-m-d', strtotime($date. ' -1 tháng'));
Làm cách nào để có được ngày cuối cùng của tháng kể từ ngày trong php?Trong một dòng. $date = new DateTime('ngày cuối cùng của tháng này');. Bạn có thể muốn thêm $date->modify('last day of this month')->setTime(23,59,59); . (. Những công việc này. $date = new DateTime('ngày cuối cùng của năm 2020-2');. @John bạn sai rồi Làm cách nào để thay đổi ngày trong php?Chúng ta có thể đạt được chuyển đổi này bằng cách sử dụng hàm strtotime() và date(). Đây là các hàm có sẵn của PHP. . $orgDate = "26-02-2019"; $newDate = date("m-d-Y", strtotime($orgDate)); echo "Định dạng ngày mới là. ". $newDate. " (MM-DD-YYYY)"; |