ฉันจะได้รับวันจันทร์ของสัปดาห์นี้ด้วย:
$monday = date_create()->modify('this Monday');
ฉันต้องการได้อย่างง่ายดายเหมือนกันในวันที่ 1 ของเดือนนี้ ฉันจะบรรลุสิ่งนั้นได้อย่างไร
ฉันจะได้รับวันจันทร์ของสัปดาห์นี้ด้วย:
$monday = date_create()->modify('this Monday');
ฉันต้องการได้อย่างง่ายดายเหมือนกันในวันที่ 1 ของเดือนนี้ ฉันจะบรรลุสิ่งนั้นได้อย่างไร
คำตอบ:
ต้องใช้ PHP 5.3 ในการทำงาน ("วันแรกของ" เปิดตัวใน PHP 5.3) มิฉะนั้นตัวอย่างข้างต้นเป็นวิธีเดียวที่จะทำได้:
<?php
// First day of this month
$d = new DateTime('first day of this month');
echo $d->format('jS, F Y');
// First day of a specific month
$d = new DateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');
// alternatively...
echo date_create('2010-01-19')
->modify('first day of this month')
->format('jS, F Y');
ใน PHP 5.4+ คุณสามารถทำได้:
<?php
// First day of this month
echo (new DateTime('first day of this month'))->format('jS, F Y');
echo (new DateTime('2010-01-19'))
->modify('first day of this month')
->format('jS, F Y');
ถ้าคุณชอบวิธีรัดกุมในการทำเช่นนี้และมีปีและเดือนในค่าตัวเลขคุณสามารถใช้date()
:
<?php
echo date('Y-m-01'); // first day of this month
echo date("$year-$month-01"); // first day of a month chosen by you
->modify()
ถ้าคุณต้องการเพียงแค่วันแรกของเดือนปัจจุบัน คุณสามารถส่งผ่าน'first day of this month'
เพื่อสร้าง DateTime $date = new DateTime('first day of this month')
โดยตรงเช่น: แค่พูดว่า ...
นี่คือสิ่งที่ฉันใช้
วันแรกของเดือน:
date('Y-m-01');
วันสุดท้ายของเดือน:
date('Y-m-t');
date('Y-m-t');
วันสุดท้ายของเดือนที่แล้วอาจจะคว้าใช้
date('w', '2015-05-01');
จากนั้นฉันก็จบลงด้วยวันก่อนแทนที่จะเป็นวันจริง (นี่จะให้ฉัน 4 แทนที่ถูกต้อง 5)
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
นี่คือทุกสิ่งที่คุณต้องการ:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
strtotime('first day of this month', time())
จะกลับมาในวันแรกและเวลาเหมือนปัจจุบัน ดังนั้นจึงไม่ใช่วันแรกเวลา 0:00 น. เป็นวันแรกและเป็นเวลาแล้ว strtotime('first day of this month 00:00:00', time())
การแก้ไขนี้
ขณะนี้ฉันใช้โซลูชันนี้:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
ปัญหาเดียวที่ฉันพบคือมีการตั้งเวลาแปลก ๆ ไว้ ฉันต้องการช่วงที่ถูกต้องสำหรับอินเทอร์เฟซการค้นหาของฉันและฉันก็พบสิ่งนี้:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
ฉันใช้วิธีที่บ้าคลั่งในการทำเช่นนี้โดยใช้คำสั่งนี้
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
นั่นคือทั้งหมด
ใน php 5.2 คุณสามารถใช้:
<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>
น่าเกลียด (และไม่ได้ใช้วิธีการโทรของคุณด้านบน) แต่ใช้งานได้:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
หรือlast day of this month
ทั้งสองทำงาน แต่โปรดจำไว้ว่า $ month จะต้องเป็นสตริงที่มีชื่อของเดือนเช่น "January" ตลอดทางที่คิดว่า "Decemember" date('Y-m-t');
หรือคุณก็สามารถใช้
คุณสามารถทำได้เช่นนี้:
$firstday = date_create()->modify('first day January 2010');
ฉันใช้สิ่งนี้กับงาน cron รายวันเพื่อตรวจสอบว่าฉันควรส่งอีเมลในวันแรกของเดือนที่กำหนดไปยัง บริษัท ในเครือของฉันหรือไม่ มันเป็นสองสามบรรทัดมากกว่าคำตอบอื่น ๆ แต่แข็งเหมือนหิน
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];
//if it's not the first day then stop
if($day != "01") {
echo "error - it's not the first of the month today";
exit;
}
ใช้วิธีวันที่เราควรจะได้รับผลลัพธ์ เช่น; วันที่ ('N / D / l', mktime (0, 0, 0, เดือน, วัน, ปี));
ตัวอย่างเช่น
echo date('N', mktime(0, 0, 0, 7, 1, 2017)); // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017)); // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017)); // will return Saturday
นิพจน์ php พิเศษทั้งหมดเหล่านั้นในจิตวิญญาณของ first day of ...
ที่ดีแม้ว่าพวกเขาออกไปจากหัวของฉันครั้งแล้วครั้งเล่า
ดังนั้นฉันจึงตัดสินใจสร้าง abstractions พื้นฐานของ datetime สองสามตัวและการใช้งานเฉพาะจำนวนมากซึ่งอัตโนมัติโดย IDE ใด ๆ ประเด็นก็คือการค้นหาสิ่งที่ชนิดของสิ่งที่ ชอบtoday
, now
, the first day of a previous month
และอื่น ๆ ทั้งหมดของสิ่งเหล่านั้นฉันได้จดทะเบียนเป็น datetimes ดังนั้นจึงมีอินเตอร์เฟซหรือระดับนามธรรมที่เรียกว่าISO8601DateTime
และชุดข้อมูลเฉพาะที่ใช้มัน
รหัสในกรณีเฉพาะของคุณดูเหมือนว่า:
(new TheFirstDayOfThisMonth(new Now()))->value();
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการนี้ให้ดูที่รายการนี้