Nếu tôi có hai ngày 20-4-2010 và 22-4-2010 trong hai hộp văn bản và Tôi muốn các ngày như thế này 20, 21, 22. Làm thế nào để tôi nhận được điều đó?Cách tìm ngày tháng giữa hai ngày được chỉ định?
10
A
Trả lời
14
Tôi khá chắc chắn điều này đã được trả lời một nghìn lần trước, nhưng dù sao:
$start = strtotime('20-04-2010 10:00');
$end = strtotime('22-04-2010 10:00');
for($current = $start; $current <= $end; $current += 86400) {
echo date('d-m-Y', $current);
}
Phần 10:00
là để ngăn chặn mã để bỏ qua hoặc lặp lại một ngày do thời gian tiết kiệm ánh sáng ban ngày.
Bằng cách đưa ra số ngày:
for($i = 0; $i <= 2; $i++) {
echo date('d-m-Y', strtotime("20-04-2010 +$i days"));
}
Với PHP5.3
$period = new DatePeriod(
new DateTime('20-04-2010'),
DateInterval::createFromDateString('+1 day'),
new DateTime('23-04-2010') // or pass in just the no of days: 2
);
foreach ($period as $dt) {
echo $dt->format('d-m-Y');
}
7
Bạn có thể sử dụng mktime()
.
mktime() hữu ích khi thực hiện số học và xác thực ngày vì nó sẽ tự động tính giá trị chính xác cho đầu vào ngoài phạm vi.
Nếu bạn tăng số ngày bạn nhận được một ngày hợp lệ trở lại, ngay cả khi bạn đi qua vào cuối tháng:
<?php
$day= 25;
$dateEnd = mktime(0,0,0,5,3,2010);
do {
$dateCur = mktime(0,0,0,4,$day,2010);
$day++;
print date('d-m-y', $dateCur) .'<br>';
} while ($dateCur < $dateEnd);
Output:
25-04-10
26-04-10
27-04-10
28-04-10
29-04-10
30-04-10
01-05-10
02-05-10
03-05-10
1
Bạn có thể làm:
$start = strtotime("2010-04-20"); // get timestamp for start date.
$end = strtotime("2010-04-22"); // get timestamp for end date.
// go from start timestamp to end timestamp adding # of sec in a day.
for($t=$start;$t<=$end;$t+=86400) {
// get the date for this timestamp.
$d = getdate($t);
// print the date.
echo $d['mday'].'-'.$d['mon'].'-'.$d['year']."\n";
}
Output:
20-4-2010
21-4-2010
22-4-2010
-1
Hãy thử điều này, Hy vọng nó giúp giúp
$begin = date("Y-m-d", strtotime($date);
$end = date("Y-m-d", strtotime($date));
$begin = new DateTime($begin);
$end = new DateTime($end);
for ($i = $begin; $i <= $end; $i=$i->modify('+1 day')) {
echo $i->format('Y-m-d');
}
0
/**
* Function to list of weeks start and end.
* @param string strDateFrom (Date From "YYYY-MM-DD")
* @param string strDateTo (Date To "YYYY-MM-DD")
* @return array weeks
*/
function getWeeksBetweenTowDates($date_from, $date_to) {
$startweek = $current_week = date("W", strtotime($date_from));
$endweek = date("W", strtotime($date_to));
$current_year = date("Y", strtotime($date_from));
$current_yearweek = date("Y", strtotime($date_from)) . $startweek;
$end_yearweek = date("Y", strtotime($date_to)) . $endweek;
$start_day = 0;
$end_day = 0;
while ($current_yearweek <= $end_yearweek) {
$dto = new DateTime();
if ($start_day == 0) {
$start_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 0)->format('Y-m-d');
$end_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 6)->format('Y-m-d');
} else {
$start_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 0)->format('Y-m-d');
$end_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 6)->format('Y-m-d');
}
$arr_weeks[sprintf("%02d", $current_week)] = $start_day . " =>" . $end_day;
$last_yearweek_in_year = $current_year . date("W", strtotime('31-12-' . $current_year));
if ($current_yearweek == $last_yearweek_in_year) { //last week in the year
$current_week = 1;
$current_year = ($current_year + 1);
} else {
$current_week = ($current_week + 1);
}
$current_yearweek = $current_year . sprintf("%02d", $current_week);
}
return $arr_weeks;
}
Run Like: date_from = 2015/10/20, date_to = 2016-04-15
$arr_weeks = $this->getWeeksBetweenTowDates($date_from, $date_to);
Output:
Array
(
[43] => 2015-10-18 =>2015-10-24
[44] => 2015-10-25 =>2015-10-31
[45] => 2015-11-01 =>2015-11-07
[46] => 2015-11-08 =>2015-11-14
[47] => 2015-11-15 =>2015-11-21
[48] => 2015-11-22 =>2015-11-28
[49] => 2015-11-29 =>2015-12-05
[50] => 2015-12-06 =>2015-12-12
[51] => 2015-12-13 =>2015-12-19
[52] => 2015-12-20 =>2015-12-26
[53] => 2015-12-27 =>2016-01-02
[01] => 2016-01-03 =>2016-01-09
[02] => 2016-01-10 =>2016-01-16
[03] => 2016-01-17 =>2016-01-23
[04] => 2016-01-24 =>2016-01-30
[05] => 2016-01-31 =>2016-02-06
[06] => 2016-02-07 =>2016-02-13
[07] => 2016-02-14 =>2016-02-20
[08] => 2016-02-21 =>2016-02-27
[09] => 2016-02-28 =>2016-03-05
[10] => 2016-03-06 =>2016-03-12
[11] => 2016-03-13 =>2016-03-19
[12] => 2016-03-20 =>2016-03-26
[13] => 2016-03-27 =>2016-04-02
[14] => 2016-04-03 =>2016-04-09
[15] => 2016-04-10 =>2016-04-16
)
Các vấn đề liên quan
- 1. Tháng giữa hai ngày chức năng
- 2. Cách tìm số ngày giữa hai ngày/DateTimePickers
- 3. Tạo ngày giữa hai ngày
- 4. Cách thanh lịch để nhận số tháng giữa hai ngày?
- 5. cách tìm sự khác biệt giữa năm và tháng giữa hai ngày?
- 6. định dạng ngày tháng jquery ui định dạng ngày tháng
- 7. Cách liệt kê tất cả các ngày giữa hai ngày
- 8. Cách đếm ngày giữa hai ngày trong PHP?
- 9. tạo một phạm vi tháng giữa hai ngày trong ruby
- 10. Ngày tháng :: Calc - định dạng ngày và tháng
- 11. Tìm ngày tháng trong chuỗi
- 12. Làm thế nào để có được tất cả các ngày (tháng, ngày và năm) giữa hai ngày trong python?
- 13. Định dạng ngày trong ngày, ngày tháng, năm
- 14. Sự khác biệt PHP trong tháng giữa hai ngày?
- 15. Định dạng ngày tháng DB2
- 16. Tính số đầy đủ tháng giữa hai ngày trong SQL
- 17. Cách tìm ngày cuối cùng của tháng?
- 18. Số ngày giữa hai ngày trong Joda-Time
- 19. tính ngày chủ nhật giữa hai ngày
- 20. Rails ActiveRecord - cách tìm nạp bản ghi giữa hai ngày
- 21. Ngày giữa hai ngày trong Python
- 22. Ngày, giờ, phút, giây giữa hai ngày
- 23. Java, Tính số ngày giữa hai ngày
- 24. Cách tính số ngày làm việc giữa hai ngày?
- 25. In tất cả các ngày-ngày giữa hai ngày
- 26. Định dạng ngày tháng PHPExcel
- 27. Trừ hai ngày tháng trong php
- 28. Cách tìm kiếm giữa hai ngày trong LINQ to Entity?
- 29. Cách lặp lại giữa hai ngày
- 30. Cách tạo ngày và giờ ngẫu nhiên giữa hai ngày?
+1 Câu trả lời hay nhất ... –
+1 cho các lớp Ngày *, -1 để gọi nó là "ưa thích" và "quá mức cần thiết", +1 cho việc khác với giải pháp 'strtotime' được trích dẫn. :) – salathe
@gordon bạn có thể giải thích lý do tại sao thiết lập thời gian 10:00 sáng ở đó cho phép những người có tài khoản cho DST một cách thích hợp không? Để tham khảo lý do tôi hỏi, hãy xem: http://stackoverflow.com/questions/15302469/problems-with-finding-the-days-between-two-unix-timestamps – Shackrock