날짜 MM-dd-yyyy
형식이 주어지면 누군가가 요일을 가져 오도록 도와 줄 수 있습니까?
DateTime
해결책 을 요청했지만 대부분의 답변은 그것을 제공하지 않습니다. =)
날짜 MM-dd-yyyy
형식이 주어지면 누군가가 요일을 가져 오도록 도와 줄 수 있습니까?
DateTime
해결책 을 요청했지만 대부분의 답변은 그것을 제공하지 않습니다. =)
답변:
내가 사용하는 것은 다음과 같습니다.
$day = date('w');
$week_start = date('m-d-Y', strtotime('-'.$day.' days'));
$week_end = date('m-d-Y', strtotime('+'.(6-$day).' days'));
$ day 에는 요일을 나타내는 0에서 6까지의 숫자가 포함됩니다 (일요일 = 0, 월요일 = 1 등).
$ week_start 에는 현재주의 일요일 날짜가 mm-dd-yyyy로 포함됩니다.
$ week_end 에는 현재주의 토요일 날짜가 mm-dd-yyyy로 포함됩니다.
strtotime('this week', time());
time ()을 바꿉니다. 다음 일요일 / 마지막 월요일 방법은 현재 날짜가 일요일 / 월요일이면 작동하지 않습니다.
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
항상 이전 주 시작이 필요한 경우 작동하지 않지만 @LewisBuckley의 의견은 작동합니다.
time()
오늘을 지정하려는 경우 두 번째 인수 는 옵션입니다.
사용하기 매우 간단한 strtotime
기능 :
echo date("Y-m-d", strtotime('monday this week')), "\n";
echo date("Y-m-d", strtotime('sunday this week')), "\n";
PHP 버전에 따라 약간 다릅니다 .
2015-03-16
2015-03-22
2015-03-23
2015-03-22
2015-03-30
2015-03-29
이번 주 와 같은 상대적 설명 에는 고유 한 컨텍스트가 있습니다. 다음은 이번 주 월요일과 일요일 이 월요일 또는 일요일 인 출력을 보여줍니다 .
$date = '2015-03-16'; // monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";
$date = '2015-03-22'; // sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";
다시 말하지만 PHP 버전에 따라 약간 다릅니다 .
2015-03-16
2015-03-22
2015-03-23
2015-03-29
2015-03-16
2015-03-22
2015-03-23
2015-03-22
2015-03-23
2015-03-22
2015-03-23
2015-03-29
2015-03-23
2015-03-29
2015-03-30
2015-03-29
간단하게 유지 :
<?php
$dateTime = new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');
?>
출처 : PHP 매뉴얼
주의 : 일부 사용자가 언급했듯이 $ dateTime 값이 수정됩니다.
$dateTime = new \DateTime('2012-05-14');
DateTime
클래스 를 지정하기 위해 네임 스페이스없이 사용하고 DateTime
있습니다. 즉, 현재 네임 스페이스에서 다른 클래스를 호출하더라도 코드가 작동 합니다.
이 질문에는 좋은 DateTime 답변 이 필요합니다 .
function firstDayOfWeek($date)
{
$day = DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'), (int)$day->format('W'), 1);
return $day->format('m-d-Y');
}
var_dump(firstDayOfWeek('06-13-2013'));
산출:-
string '06-10-2013' (length=10)
이것은 연도 경계와 윤년을 다룰 것입니다.
편집 : 아래 링크는 명시된 PHP 버전에서 더 이상 실행되지 않습니다. strtotime의 안정성을 향상시키는 PHP 5.6에서 실행되지만 완벽하지는 않습니다! 표의 결과는 PHP 5.6의 실시간 결과입니다.
그만한 가치는 일관된 참조 프레임을 결정할 때 strtotime의 불안정한 동작에 대한 분석입니다.
http://gamereplays.org/reference/strtotime.php
기본적으로 호출 할 때 현재 어떤 요일에 있든 상관없이이 문자열 만 안정적으로 동일한 날짜를 제공합니다.
strtotime("next monday");
strtotime("this sunday");
strtotime("last sunday");
다음 코드는 모든 사용자 지정 날짜에서 작동해야하며 원하는 날짜 형식 만 사용합니다.
$custom_date = strtotime( date('d-m-Y', strtotime('31-07-2012')) );
$week_start = date('d-m-Y', strtotime('this week last monday', $custom_date));
$week_end = date('d-m-Y', strtotime('this week next sunday', $custom_date));
echo '<br>Start: '. $week_start;
echo '<br>End: '. $week_end;
PHP 5.2.17 결과로 코드를 테스트했습니다.
Start: 30-07-2012
End: 05-08-2012
월요일을주의 첫날로 가정하면 다음과 같이 작동합니다.
echo date("M-d-y", strtotime('last monday', strtotime('next week', time())));
이것은 내가 어떤 날짜 에서 일주일의 첫 번째와 마지막 날을 가져 오는 데 사용하는 것 입니다. 이 경우 월요일은 요일입니다 ...
$date = date('Y-m-d') // you can put any date you want
$nbDay = date('N', strtotime($date));
$monday = new DateTime($date);
$sunday = new DateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
여기서는 일요일을 첫 번째와 토요일을주의 마지막 날로 간주하고 있습니다.
$m = strtotime('06-08-2012');
$today = date('l', $m);
$custom_date = strtotime( date('d-m-Y', $m) );
if ($today == 'Sunday') {
$week_start = date("d-m-Y", $m);
} else {
$week_start = date('d-m-Y', strtotime('this week last sunday', $custom_date));
}
if ($today == 'Saturday') {
$week_end = date("d-m-Y", $m);
} else {
$week_end = date('d-m-Y', strtotime('this week next saturday', $custom_date));
}
echo '<br>Start: '. $week_start;
echo '<br>End: '. $week_end;
출력 :
시작 : 2012
년 5 월 8 일 끝 : 2012 년 11 월 8 일
이건 어때요?
$day_of_week = date('N', strtotime($string_date));
$week_first_day = date('Y-m-d', strtotime($string_date . " - " . ($day_of_week - 1) . " days"));
$week_last_day = date('Y-m-d', strtotime($string_date . " + " . (7 - $day_of_week) . " days"));
이 시도:
function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
$wk_ts = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
$mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
return date($format, $mon_ts);
}
$sStartDate = week_start_date($week_number, $year);
$sEndDate = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
( 이 포럼 스레드에서 )
이것은 내가 찾은 가장 짧고 가장 읽기 쉬운 솔루션입니다.
<?php
$weekstart = strtotime('monday this week');
$weekstop = strtotime('sunday this week 23:59:59');
//echo date('d.m.Y H:i:s', $weekstart) .' - '. date('d.m.Y H:i:s', $weekstop);
?>
strtotime
보다 빠릅니다 new DateTime()->getTimestamp()
.
그냥 사용 date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
$today_day = date('D'); //Or add your own date
$start_of_week = date('Ymd');
$end_of_week = date('Ymd');
if($today_day != "Mon")
$start_of_week = date('Ymd', strtotime("last monday"));
if($today_day != "Sun")
$end_of_week = date('Ymd', strtotime("next sunday"));
월요일을주의 시작으로하려면 다음과 같이하십시오.
$date = '2015-10-12';
$day = date('N', strtotime($date));
$week_start = date('Y-m-d', strtotime('-'.($day-1).' days', strtotime($date)));
$week_end = date('Y-m-d', strtotime('+'.(7-$day).' days', strtotime($date)));
이를 수행하는 현명한 방법은 PHP가 시간대 차이와 일광 절약 시간 (DST)을 처리하도록하는 것입니다. 이 작업을 수행하는 방법을 보여 드리겠습니다.
이 함수는 월요일부터 금요일까지 모든 요일을 생성합니다 (작업 주일 생성에 편리함).
class DateTimeUtilities {
public static function getPeriodFromMondayUntilFriday($offset = 'now') {
$now = new \DateTimeImmutable($offset, new \DateTimeZone('UTC'));
$today = $now->setTime(0, 0, 1);
$daysFromMonday = $today->format('N') - 1;
$monday = $today->sub(new \DateInterval(sprintf('P%dD', $daysFromMonday)));
$saturday = $monday->add(new \DateInterval('P5D'));
return new \DatePeriod($monday, new \DateInterval('P1D'), $saturday);
}
}
foreach (DateTimeUtilities::getPeriodFromMondayUntilFriday() as $day) {
print $day->format('c');
print PHP_EOL;
}
이것은 이번 주 월요일-금요일 datetimes를 반환합니다. 임의의 날짜에 대해 동일한 작업을 수행하려면 날짜를 매개 변수로에 전달합니다 DateTimeUtilities ::getPeriodFromMondayUntilFriday
.
foreach (DateTimeUtilities::getPeriodFromMondayUntilFriday('2017-01-02T15:05:21+00:00') as $day) {
print $day->format('c');
print PHP_EOL;
}
//prints
//2017-01-02T00:00:01+00:00
//2017-01-03T00:00:01+00:00
//2017-01-04T00:00:01+00:00
//2017-01-05T00:00:01+00:00
//2017-01-06T00:00:01+00:00
OP가 물었 듯이 월요일에만 관심이 있습니까?
$monday = DateTimeUtilities::getPeriodFromMondayUntilFriday('2017-01-02T15:05:21+00:00')->getStartDate()->format('c');
print $monday;
// prints
//2017-01-02T00:00:01+00:00
다음을 사용하여 날짜를 구문 분석하고 결과에 strptime()
사용 date()
합니다.
date('N', strptime('%m-%d-%g', $dateString));
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver'); //Set apprpriate timezone
$start_date = strtotime('2009-12-15'); //Set start date
//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0, 0, 0, date('m', $start_date), date('d', $start_date), date('Y', $start_date)) - ((date("w", $start_date) ==0) ? 0 : (86400 * date("w", $start_date)));
//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);
?>
(참고 : 질문의 MM, dd 및 yyyy는 표준 php 날짜 형식 구문이 아닙니다. 무슨 뜻인지 확신 할 수 없으므로 ISO 년-월-일로 $ start_date를 설정했습니다)
그것을하는 또 다른 방법 ....
$year = '2014';
$month = '02';
$day = '26';
$date = DateTime::createFromFormat('Y-m-d H:i:s', $year . '-' . $month . '-' . $day . '00:00:00');
$day = date('w', $date->getTimestamp());
// 0=Sunday 6=Saturday
if($day!=0){
$newdate = $date->getTimestamp() - $day * 86400; //86400 seconds in a day
// Look for DST change
if($old = date('I', $date->getTimestamp()) != $new = date('I', $newdate)){
if($old == 0){
$newdate -= 3600; //3600 seconds in an hour
} else {
$newdate += 3600;
}
}
$date->setTimestamp($newdate);
}
echo $date->format('D Y-m-d H:i:s');
내 시간대가 호주이고 strtotime()
영국 날짜 를 싫어한다는 점을 감안할 때 이것이 매우 실망 스럽습니다 .
현재 날짜가 일요일이면 다음 strtotime("monday this week")
날을 반환합니다.
이를 극복하려면 :
주의 : 이것은 호주 / 영국 날짜에만 유효합니다.
$startOfWeek = (date('l') == 'Monday') ? date('d/m/Y 00:00') : date('d/m/Y', strtotime("last monday 00:00"));
$endOfWeek = (date('l') == 'Sunday') ? date('d/m/Y 23:59:59') : date('d/m/Y', strtotime("sunday 23:59:59"));
$string_date = '2019-07-31';
echo $day_of_week = date('N', strtotime($string_date));
echo $week_first_day = date('Y-m-d', strtotime($string_date . " - " . ($day_of_week - 1) . " days"));
echo $week_last_day = date('Y-m-d', strtotime($string_date . " + " . (7 - $day_of_week) . " days"));
나는이 질문에 몇 번 반대했고 항상 날짜 기능이 이것을 더 쉽고 명확하게 만들지 않는다는 것에 놀랐습니다. 다음은 DateTime
클래스 를 사용하는 PHP5 용 솔루션입니다 .
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/
function getFirstDayOfWeek(DateTime $date, $firstDay = 0) {
$offset = 7 - $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w') + $offset) % 7) . 'days');
return $ret;
}
원래 날짜를 변경하지 않으려면 복제해야합니다.
이건 어떤가요:
$date = "2013-03-18";
$searchRow = date("d.m.Y", strtotime('last monday',strtotime($date." + 1 day")));
echo "for date " .$date ." we get this monday: " ;echo $searchRow; echo '<br>';
최선의 방법은 아니지만 테스트를했고 이번 주에 있으면 올바른 월요일을 얻고, 월요일에 있으면 월요일에 올 것입니다.