วันศุกร์ที่ 2 กุมภาพันธ์ พ.ศ. 2561

MYSQL หาวันแรกของเดือน , วันสุดท้ายของเดือน, หาเมื่อวาน วันที่ผ่านมา

MYSQL หาวันแรกของเดือน    เช่นเดือน 2018-02-02

hydrodata.r_date = date(((PERIOD_ADD(EXTRACT(YEAR_MONTH FROM CURDATE()),0)*100)+1)))
**0 = เดือนปัจจุบัน  - "2018-02-01"
   -1 = เดือนที่แล้ว - "2018-01-01"
   
หาวันสุดท้ายของเดือน
   month(hydrodata.r_date) = MONTH(LAST_DAY(DATE_ADD(curdate(), INTERVAL -1 MONTH)))
** -1 = 1 เดือนที่แล้ว  - "2018-01-31"
     -2 = 2 เดือนที่แล้ว - "2017-12-31"

หาวันเมื่อวาน
     hydrodata.r_date = DATE_ADD(curdate(), INTERVAL -1 DAY)

** -1 = 1 วันผ่านมา  - "2018-02-01"
     -2 = 2 วันผ่านมา - "2018-01-31"

วันพุธที่ 31 มกราคม พ.ศ. 2561

แปลงวันที่ไทย

PHP
ลด-เพิ่มวัน 1 วัน (+-)
$mydt1 =  date("Y-m-d", strtotime("-1 days"));
ลด-เพิ่มเดือน 1 เดือน (+-)
$mydt1 =  date("Y-m-d", strtotime("-1 month"))
ลด-เพิ่มปี1 ปี(+-)
$mydt1 =  date("Y-m-d", strtotime("-1 year"))

from DB
   $mydt1 =$r_date;

function DateThai($strDate)
{
$strYear = date("Y",strtotime($strDate))+543;
$strMonth= date("n",strtotime($strDate));
$strDay= date("j",strtotime($strDate));
$strMonthCut = Array("","ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค.");
$strMonthThai=$strMonthCut[$strMonth];
return "$strDay $strMonthThai $strYear";
}

$strDate = $mydt1;

นำไปใช้
    $mydt = DateThai($strDate);



การใช้งานรูปแบบข้อความวันที่และเวลา กับฟังก์ชั่น strtotime() ใน php
05 June 2017 By Ninenik Narkdee
date() เปรียบเทียบวันที่ วันที่และเวลา strtotime()
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ date() เปรียบเทียบวันที่ วันที่และเวลา strtotime()


ไปที่  Copy 
http://niik.in/800
เนื้อหานี้จะเป็นแนวทางการใช้งานรูปแบบวันที่และเวลาที่เป็นข้อความ เพื่อประยุกต์ใช้งานเกี่ยวกับ
วันที่และเวลาที่ต้องการ ตัวอย่างเช่น วันอังคารหน้าวันที่เท่าไหร่ เสาร์ที่สองของเดือนมกราคมคือวันที่เท่าไหร่
เหล่านี้เป็นต้น
    โดยแนะนำว่าเนื้อหาในตอนนี้ เป็นทางเลือกสำหรับจัดการเกี่ยวกับวันที่และเวลาที่ซับซ้อน เลือกนำไปใช้
ถ้าเห็นว่ามีประโยชน์ โดยไม่ต้องจำสัญลักษณ์ทั้งหมดก็ได้ แต่ใหัรู้ว่ามีวิธีเหล่านี้อยู่ ซึ่งถ้าหากต้องการใช้งาน
ก็สามารถกลับมาดูเนื้อหาในบทความนี้เป็นแนวทางได้ ซึ่งเท่าที่ดูแล้ว บางรูปแบบคำสั่งอาจจะไม่จำเป็น
บางคำสั่งก็น่าสนใจ ลองอ่านรายละเอียดกันดู

ดูต้นฉบับอ้างอิงได้ที่ http://php.net/manual/en/datetime.formats.relative.php

ก่อนอื่นมาดูตารางสัญลักษณ์ต่างๆ ที่เราจะใช้ในการนำไปจัดรูปแบบข้อความวันที่ ไม่ว่าจะเป็น ชื่อวัน
ชื่อวันแบบย่อ เครื่องหมาย +/- เป็นต้น
สัญลักษณ์ที่ใช้งานรูปแบบข้อความวันที่ใน php แสดงในตารางได้ดังนี้

สัญลักษณ์ที่ใช้งาน
คำอธิบาย รูปแบบ
ชื่อวัน ได้ทั้งแบบเต็ม
และ แบบย่อ 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'
| 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
ข้อความแสดงวันปกติ ไม่ใช่
เสาร์ อาทิตย์ 'weekday' | 'weekdays'
ตัวเลข อาจมีค่า + หรือ
- ด้านหน้า แล้วแต่กรณี [+-]?[0-9]+
ข้อคามแสดงลำดับที่ 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth'
| 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'
ข้อความแสดงความสัมพันธ์
เช่น ถัดไป ก่อนหน้า วันนี้ 'next' | 'last' | 'previous' | 'this'
ช่องว่าง กรณีมีการเชื่อมข้อความ [ \t]+
หน่วยเวลา (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight'
| 'month' | 'year') 's'?) | 'weeks' | หรือ ข้อความแสดงวันปกติ ( 'weekday' | 'weekdays' )

ประยุกต์การใช้งานคำอธิบายวันที่และเวลากับฟังก์ชั่นคำสั่ง strtotime()

รูปแบบข้อความ
"yesterday"
ใช้แสดงวันที่และเวลาของวันเมื่อวาน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("yesterday"))."<br>"; // 2017-06-01 00:00:00
// กรณีต้องการกำหนดเวลาไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("yesterday 15:00"))."<br>"; // 2017-06-01 15:00:00
?>


รูปแบบข้อความ
"tomorrow"
ใช้แสดงวันที่และเวลาของวันพรุ่งนี้
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("tomorrow"))."<br>"; // 2017-06-03 00:00:00
// กรณีต้องการกำหนดเวลาไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("tomorrow 15:00"))."<br>"; // 2017-06-03 15:00:00
?>


รูปแบบข้อความ
"midnight" กับ "today" กับ "now"
ใช้แสดงวันที่และเวลาของวันปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("now"))."<br>"; // 2017-06-02 04:18:28
// now ใช้แสดงวันที่และเวลาปัจจุบัน ต่างจาก midnight และ today ที่เซ็ตเวลาเป็น 00:00:00
echo date("Y-m-d H:i:s",strtotime("midnight"))."<br>"; // 2017-06-02 00:00:00
echo date("Y-m-d H:i:s",strtotime("today"))."<br>"; // 2017-06-02 00:00:00

// กรณี today สามารถทำการกำหนดเวลาไปด้วยได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("today 12:11"))."<br>"; // 2017-06-02 12:11:00
?>


รูปแบบข้อความ
"noon"
ใช้แสดงเวลาเที่ยงตรง หรือ 12:00:00 ของวันนั้นๆ
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("noon"))."<br>"; // 2017-06-02 12:00:00
// กรณีต้องการกำหนดวันที่ไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("2017-06-03 noon"))."<br>"; // 2017-06-03 12:00:00
// สามารถใช้รวมกับรูปแบบข้อความวันที่อื่นๆ เช่น "yesterday noon"
echo date("Y-m-d H:i:s",strtotime("yesterday noon"))."<br>"; // 2017-06-01 12:00:00
echo date("Y-m-d H:i:s",strtotime("tomorrow noon"))."<br>"; // 2017-06-03 12:00:00
?>


รูปแบบข้อความ
"ใช้ชื่อวัน" ตามสัญลักษณ์รูปแบบวันที่ตามตารางด้านบน
ใช้แสดงวันที่ของวันที่กำหนด โดยนับไปข้างหน้า เช่น สมมติ วันนี้วันศุกร์ "Friday"
ถ้าเรากำหนดชื่อวันเป็น "Monday" ก็จะหมายถึง วันจันทร์ที่จะถึง ไม่ใช่วันจันทร์ที่ผ่านมา
และถ้ากำหนดเป็นชื่อวันปัจจุบัน ก็จะหมายถึงวันที่ ของวันนั้นๆ เช่น กำหนดชื่อวันเป็น "Friday"
ก็จะหมายถึงวันศุกร์วันนี้ ไม่ใช้วันศุกร์หน้า เป็นต้น
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("Monday"))."<br>"; // 2017-06-05 00:00:00
echo date("Y-m-d H:i:s",strtotime("Mon 15:10"))."<br>"; // 2017-06-05 15:10:00
echo date("Y-m-d H:i:s",strtotime("Fri 15:10"))."<br>"; // 2017-06-02 15:10:00
?>


รูปแบบข้อความ
ข้อความสัมพันธ์วันที่ เว้นวรรค ตามด้วย "week"
ใช้แสดงของวันที่และเวลาให้สัมพันธ์กับข้อความโดยอ้างอิงกับสัปดาห์ เช่น
หาวันที่ของวันจันทร์สัปดาห์หน้า
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("Monday next week"))."<br>";  // 2017-06-05 00:00:00
echo date("Y-m-d H:i:s",strtotime("Saturday next week"))."<br>"; // 2017-06-10 00:00:00
// กรณีกำหนดเวลาสามารถ กำหนดได้เป็น
echo date("Y-m-d H:i:s",strtotime("Saturday next week 13:20"))."<br>"; // 2017-06-10 13:20:00
echo date("Y-m-d H:i:s",strtotime("Saturday this week 13:20"))."<br>"; // 2017-06-03 13:20:00
?>


รูปแบบข้อความ
ข้อความเลขลำดับที่ เว้นวรรค ตามด้วยหน่วยเวลา
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับข้อความ นับจากปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first day"))."<br>";  // 2017-06-03 16:36:41
echo date("Y-m-d H:i:s",strtotime("second month"))."<br>"; // 2017-08-02 16:36:41
// กรณีกำหนดเวลาสามารถ กำหนดได้เป็น
echo date("Y-m-d H:i:s",strtotime("first day 11:10"))."<br>";  // 2017-06-03 11:10:00
?>


รูปแบบข้อความ
+/- ตัวเลขจำนวน เว้นวรรค ตามด้วยหน่วยเวลา หรือ "week"
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับค่าตัวเลขที่นำมาบวกเพิ่ม หรือลดลง นับจากปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("1 day"))."<br>"; // 2017-06-03 16:43:47
echo date("Y-m-d H:i:s",strtotime("+1 day"))."<br>";// 2017-06-03 16:43:47
echo date("Y-m-d H:i:s",strtotime("-1 day"))."<br>";// 2017-06-01 16:43:47
// ย้อนหลังนับเฉพาะวันธรรมดา ด้วย weekdays (ไม่นับเสาร์ อาทิตย์)
echo date("Y-m-d H:i:s",strtotime("-2 weekdays"))."<br>"; // 2017-05-31 00:00:00
// นับไปอีก 1 สัปดาห์คือวันที่อะไร
echo date("Y-m-d H:i:s",strtotime("+1 weeks"))."<br>"; // 2017-06-09 16:43:47
?>


รูปแบบข้อความ
"ago"
ใช้แสดงของวันที่และเวลาที่ผ่านมา โดยสัมพันธ์กับรายการวันที่และเวลาที่เกี่ยวข้อง
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("2 days ago"))."<br>"; // 2017-05-31 16:43:47
// จะคล้ายกับ  "-2 days"
// ตัวอย่างเพิ่มเติม
// "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago"
?>


รูปแบบข้อความ
"back of" เว้นวรรค ตามด้วยชั่วโมงที่กำหนด
ใช้แสดงวันที่และเวลาในอีก 15 นาที่ ต่อมา ของชั่วโมงที่กำหนด
"front of" เว้นวรรค ตามด้วยชั่วโมงที่กำหนด
ใช้แสดงวันที่และเวลาก่อนชั่วโมงที่กำหนด 15 นาที่
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("back of 7pm"))."<br>"; // 2017-06-02 19:15:00
// 7pm คือ 19 นาฬิกา ดังนั้น 15 นาทีต่อมาของ 19:00 คือ 19:15
echo date("Y-m-d H:i:s",strtotime("back of 15"))."<br>"; // 2017-06-02 15:15:00

echo date("Y-m-d H:i:s",strtotime("front of 5am"))."<br>"; // 2017-06-02 04:45:00
// 5am คือ 5 นาฬิกา ดังนั้น 15 นาทีก่อนเวลา 05:00 คือ 04:45
echo date("Y-m-d H:i:s",strtotime("front of 23"))."<br>"; // 2017-06-02 22:45:00
?>


รูปแบบข้อความ
"first day of" เว้นวรรค ตามด้วยชื่อเดือน ปี(ถ้ามี) หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้แสดงวันที่แรกของเดือนที่เรากำหนด ปกติก็จะได้วันที่ 1 แต่จะเป็นเวลาที่ 00:00:00
ถ้าเป็นการระบุเดือน หรือปี และเวลาเป็นเวลาปัจจุบัน ณ ขณะนั้น ถ้าระบุกับข้อความที่สัมพันธ์กับเดือน
"last day of" เว้นวรรค ตามด้วยชื่อเดือน ปี(ถ้ามี) หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้แสดงวันที่สุดท้ายของเดือนที่เรากำหนด ปกติจะเป็นค่าตามจำนวนวันของเดือนนั้นๆ
แต่จะเป็นเวลาที่ 00:00:00 ถ้าเป็นการระบุเดือน หรือปี
และเวลาเป็นเวลาปัจจุบัน ณ ขณะนั้น ถ้าระบุกับข้อความที่สัมพันธ์กับเดือน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first day of June 2017"))."<br>"; // 2017-06-01 00:00:00
echo date("Y-m-d H:i:s",strtotime("first day of next month"))."<br>"; // 2017-07-01 16:43:47

echo date("Y-m-d H:i:s",strtotime("last day of June 2017"))."<br>"; // 2017-06-30 00:00:00
echo date("Y-m-d H:i:s",strtotime("last day of next month"))."<br>"; // 2017-07-31 16:43:47
?>


รูปแบบข้อความ
ข้อความแสดงลำดับที่ เว้นวรรค ตามด้วยชื่อวัน เว้นวรรค ตามด้วย "of" ตามด้วยชื่อเดือน ปี(ถ้ามี)
หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้คำนวณหาวันที่และเวลาของวัน ในสัปดาห์ที่กำหนดของเดือนนั้น หรือเดือนที่ระบุ ตามความสัมพันธ์
โดยเวลาจะเป็นเวลาที่ 00:00:00
"last" เว้นวรรค ตามด้วยชื่อวัน เว้นวรรค ตามด้วย "of" ตามด้วยชื่อเดือน ปี(ถ้ามี)
หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้คำนวณหาวันที่และเวลาของวัน ในสัปดาห์สุดท้ายของเดือนนั้น หรือเดือนที่ระบุ ตามความสัมพันธ์
โดยเวลาจะเป็นเวลาที่ 00:00:00
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?php
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first sat of June 2017"))."<br>"; // 2017-06-03 00:00:00
echo date("Y-m-d H:i:s",strtotime("first sat of next month"))."<br>"; // 2017-07-01 00:00:00

echo date("Y-m-d H:i:s",strtotime("last sat of June 2017"))."<br>"; // 2017-06-24 00:00:00
echo date("Y-m-d H:i:s",strtotime("last sat of next month"))."<br>"; // 2017-07-29 00:00:00
?>

ทั้งหมดคือรูปแบบข้อความเกี่ยวกับวันที่ และการใช้งาน รวมถึงการประยุกต์ใช้งานร่วมกับ strtotime() และ
date() โดยคำสั่ง
strtotime() จะใช้แปลงข้อความเกี่ยวกับวันที่เวลา ให้อยู่ในรูปแบบเวลา timestamp ซึ่งเป็น number
ที่เราสามารถนำไปใช้ในการเปรียบเทียบเวลา ได้
date() เป็นคำสั่งในการจัดรูปแบบการแสดงวันที่และเวลาให้อยู่ในรูปแบบที่เราต้องการ โดยรูปแบบมาตรฐาน
ที่เราคุ้น จะอยู่ในรูปแบบ 0000-00-00 00:00:00 ดังนั้นเวลาเราใช้งานวันที่ใน ฐานข้อมูล ควรกำหนด type
ของฟิลด์ที่เก็บวันที่และเวลา ให้อยู่ในรูปแบบ date หรือ datetime จะทำให้สะดวกกว่าเก็บในรูปแบบ varchar


ขอนำคำตอบในกระทู้คำถาม มาเสริมในบทความนี้
เป็นการตอบเกี่ยวกับการเทียบช่วงเวลา โดยใช้ strtotime()
ข้อมูลจากคำตอบที่ http://www.ninenik.com/forum_view_2460_1.html#comment_5740

การเปรียบเทียบวันที่ใน php น่าจะต้องใช้ค่าวันที่ที่อยู่ในรูปแบบตัวเลข หรือที่เรียกว่า timestamp
ค่าวันที่และเวลาปัจจุบัน ได้จากฟังก์ชั่น time()
ค่าวันที่และเวลาจาก ข้อความวันที่ ได้จากใช้งานฟังก์ชั่น strtotime() หรือ mktime()

1
2
3
4
5
6
7
8
<?php
$date1="2017-05-31";
$date2="2017-05-31 15:00";
$date3="2017-05-31 15:00:01";
echo strtotime($date1)."<br>";
echo strtotime($date2)."<br>";
echo strtotime($date3)."<br>";
?>

สมมติเราต้องการหาว่า วันที่หรือเวลาที่ส่งมา มากกว่าหรือน้อยกว่าวันที่ปัจจุบัน
ก็จะได้เป็น

1
2
3
if(strtotime($date1)<time()){
     echo "Yes"; 
}

กรณีเปรียบเทียบกับช่วงเวลา 2017-05-30 07:30 - 2017-05-30 19:00
เช่น เวลาในขณะนี้ อยู่ในช่วงเวลาที่กำหนดหรือไม่


1
2
3
4
5
6
$date_start1="2017-05-30 07:30";
$date_end1="2017-05-30 19:00";

if(time()>=strtotime($date_start1) && time()<=strtotime($date_end1)){
    echo "Yes";
}

หรือสมมติช่วงเวลาสิ้นสุดอย่าง $date_end1 มีค่าเพิ่มขึ้นในสัดส่วนคงที่ เราก็สามารถใช้วิธีการบวกค่า
แล้วใช้ฟังก์ัช่น strtotime() แปลงค่าอีกทีก็ได้ เช่น

1
2
3
4
5
6
7
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +11 hour +30 minute"));
// $date_end1 เราจะได้มีค่าเท่ากับ 2017-05-30 19:00

if(time()>=strtotime($date_start1) && time()<=strtotime($date_end1)){
    echo "Yes";
}

แนวทางข้างต้น ใช้ได้กับกรณีเป็นเงื่อนไขข้ามวัน อย่างตัวอย่างช่วงที่ 2
2017-05-30 19:30 - 2017-05-31 07:00

1
2
3
4
5
6
7
8
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +11 hour +30 minute"));
// $date_end2 เราจะได้มีค่าเท่ากับ 2017-05-31 07:00
echo $date_end2."<br>";

if(time()>=strtotime($date_start2) && time()<=strtotime($date_end2)){
    echo "Yes";
}


เวลาการเทียบเงื่อนไข ควรใช้ค่าตัวแปรที่คงที่ไม่ควรเปลี่ยนแปลงค่า ให้ใช้วิธีการกำหนดที่เครื่องหมายการเปรียบแทียบแทน
เช่น สมมติ ช่วงที่ 1 เวลา 2017-05-30 07:30 - 2017-05-30 19:30
แต่เราไม่ต้องการข้อมูลที่มีค่าเท่ากับ 2017-05-30 19:30
แทนที่เราจะใช้

<="2017-05-30 19:29"

เราก็ใช้เป็น

<"2017-05-30 19:30"

จะเห็นว่าเราแค่เปลี่ยนเครื่องหมายการเปรียบเทียบ โดยไม่ต้องไปเปลี่ยนค่าตัวแปรวันที่ ซึ่งอาจจะสับสนได้


นี่ตือตัวอย่างของการเปรียบเทียบเวลาสองช่วง คือ

2017-05-30 07:30 - 2017-05-30 19:30
และ
2017-05-30 19:30 - 2017-05-31 07:30

1
2
3
4
5
6
7
8
9
10
11
12
13
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    echo "Yes";
}


ส่วนเงื่อนไขการใช้งานในคำสั่ง sql สามารถนำค่าตัวแปร มาใช้งานได้เลย เช่น

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    $Where="production_time >= '$date_start1' AND production_time <'$date_end1'";
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    $Where="production_time >= '$date_start2' AND production_time <'$date_end2'";
    echo "Yes";
}





   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 04-06-2017

รูปแบบการเทียบช่วงเวลา 2 ช่วงเวลา ตามกระทู้คำถาม หากเรากำหนดวันที่เริ่มต้น
แบบตายตัว ค่าของวันที่ก็จะทำงานถูกต้อง แต่กรณีเราใช้วันที่ ณ ปัจจุบันในขณะนั้น
ด้วยคำสั่ง date("Y-m-d") การกำหนดช่วงข้ามวันจะเกิดข้อผิดพลาด ดังนั้น เราต้องปรับโค้ดเล็กน้อย

แต่ก่อนอื่นจะขออธิบายให้ภาพแบบฟิกค่าวันที่กับแบบใช้ค่าวันที่ ณ ปัจจุบันขณะนั้น

กรณ๊ฟิกค่าวันที่ตามตัวอย่าง
1
2
3
4
5
6
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

เราจะได้ ช่วงเวลาที่ 1 คือค่า $date_start1 กับ $date_end1
เป็น 2017-05-30 07:30 กับ 2017-05-30 19:30 ซึ่งยังไม่ข้ามวัน เป็นค่าที่ถูกต้อง
และช่วงที่ 2 คือค่า $date_start2 กับ $date_end2
เป็น 2017-05-30 19:30 กับ 2017-05-31 07:30 ซึ่งมีการข้ามวัน และเป็นค่าวันที่ที่ถูกต้อง

กรณีใช้ค่าวันที่ ณ ปัจจุบัน
เช่น
1
2
3
4
5
6
7
8
$nowDate=date("Y-m-d");

$date_start1="$nowDate 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="$nowDate 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";
เราจะได้ ช่วงเวลาที่ 1 คือค่า $date_start1 กับ $date_end1
เป็น 2017-05-30 07:30 กับ 2017-05-30 19:30 ซึ่งยังไม่ข้ามวัน เป็นค่าที่ถูกต้อง
แต่ถ้าเวลาขณะนั้นเป็นเวลาหลังเที่ยงคืนซึ่ง ข้ามวัน ค่าต่างๆ จะขยับเปลี่ยนแปลง
เป็น 2017-05-31 07:30 กับ 2017-05-31 19:30 พอข้ามวัน แล้วกลายเป็นค่าที่ไม่ถูกต้อง

และช่วงที่ 2 คือค่า $date_start2 กับ $date_end2
เป็น 2017-05-30 19:30 กับ 2017-05-31 07:30 ซึ่งถ้ายังไม่มีการข้ามวัน จะเป็นค่าวันที่ที่ถูกต้อง
แต่ถ้าเวลาขณะนั้นเป็นเวลาหลังเที่ยงคืนซึ่ง ข้ามวัน ค่าต่างๆ จะขยับเปลี่ยนแปลง
เป็น 2017-05-31 19:30 กับ 2017-06-01 07:30 พอข้ามวัน แล้วกลายเป็นค่าที่ไม่ถูกต้อง

ดังนั้นกรณีเราใช้วันที่ ณ ปัจจุบัน เราต้องกำหนดเงื่อนไขเพื่อเช็คหลังเที่ยงคืน ไปจนถึงเวลาสิ้นสุด
ของช่วงที่สอง ต้องกำหนดให้วันที่เริ่มต้นเป็นวันที่ผ่านมา ซึ่งจะได้ค่าคล้ายๆ กับการฟิกค่า
โดยทำโดยการแทรกเงื่อนไขเข้าไป ได้ดังนี้

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$nowDate=date("Y-m-d");
// ถ้าข้ามวันและอยู่ในช่วงก่อนถึงสิ้นสุดช่วงที่สอง ให้ปรับเป็นค่าวันที่เมื่อวาน
if(time()>=strtotime("00:00:00") && time()<strtotime("07:30:00")){
    $nowDate=date("Y-m-d",strtotime("last day"));
}
$date_start1="$nowDate 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="$nowDate 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    $Where="production_time >= '$date_start1' AND production_time <'$date_end1'";
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    $Where="production_time >= '$date_start2' AND production_time <'$date_end2'";
    echo "Yes";
}



วันจันทร์ที่ 17 กรกฎาคม พ.ศ. 2560

Dreamweaver ตั้งค่า Redirect

กรณี InsertGOTO โดย Dreamweaver


..... $insertGoTo = "confirm_add02.php?dates1=".$_POST[dates]."&ka1=".$_POST[ka]."&floor1=".$_POST[floor]; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); }
  $insertGoTo = "view.php?pers=admins"; //กำหนด Link และค่าที่จะส่งไปด้วย
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; //ส่งค่ามาให้ Dreamweaver
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
----------------------------------------------------------------------------------------------------------------
กำหนดแบบมีเงื่อนไข
if ($_POST['floor']=='Control_Room'){
$insertGoTo = 'view_logbook_control.php';
}else if ($_POST['floor']=='Main_Floor'){
$insertGoTo= 'view_logbook_main.php';
   }else if ($_POST['floor']=='Generator_Floor'){
$insertGoTo = 'view_logbook_gen.php';
}else{
$insertGoTo= 'view_logbook_tur.php';
}
   if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

ว่าด้วยการ Redirect

วิธีการ Redirect หน้าเว็บไซต์ ด้วย PHP Code 

ทำการ PHP Redirect - Header Location
<?
 header( "location: http://www.youurl.com" );
 exit(0);
?>

** location ต้องตามติดด้วย ( : ) เสมอ
 
ทำการ PHP Redirect - Header Refresh แบบตั้งเวลา
case 1
นำเอา HTML META มาแทรก PHP

echo "<html><meta http-equiv=\"refresh\" content=\"6;URL='http://youurl.com/'\">
<br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p>
</div></html>";
case 2
กรณีนี้ถ้าไม่ทำงานให้ใช้ โดยนำวางบรรทัดแรกของ PHP Code
@ob_flush(); //flush the output buffer
flush(); //flush anything else  
 sleep(10);//รอ 10 วินาทีก่อนจะ  Redirect
   header("Location: http://www.youurl.com");
case 3
 header("refresh: 2; url='http://www.youurl.com'");
exit(0);
** refresh ต้องตามติดด้วย ( : ) เสมอ
** ค่าตัวเลข 2 หมายถึง จำนวนวินาที

** สามารถระบุปลายทางด้วย ที่อยู่เว็บไซต์ ( URL ) หรือ Path / Folder ที่ต้องการ
** การระบุ exit(0); หมายถึง ให้ทำงานสิ้นสุดแค่คำสั่ง header เท่านั้น
** การใช้ function header ใน php ต้องไม่มีการสั่ง echo , print เกิดขึ้นก่อน ฟังก์ชั่น header

วิธีการ Redirect หน้าเว็บไซต์ ด้วย HTML, Button

<meta http-equiv="refresh" content="6;URL='http://youurl.com'">

วิธีการ Redirect หน้าเว็บไซต์ ด้วย Input Button  เปิดหน้า Popup ขึ้นมา

<input type="button" name="button" id="button" value="Update Data" 
onClick="window.open('http://www.youurl.com','pwin',
'location=no,status=no,scrollbars=no,resizeable=yes,toolbar=no')" />

วิธีการ Redirect หน้าเว็บไซต์ ด้วย Input Button // Style สีพื้นหลังปุ่ม / สีต่อมาคือสีของตัวหนังสือของปุ่ม

<input type="button" name="button1" id="button1" value="Send" 
onClick="location.href='manual.php'" style="background-color:#0000FF;
color:#FFFFFF" /> 

ตัวอย่าง PHP วิธีการ Redirect หน้าเว็บไซต์  

<?php
header('Refresh: 5;URL=http://www.google.com/'); // refresh header
echo "<html><head>";
// meta refresh
echo "<meta http-equiv=\"refresh\" content=\"5;URL=http://www.google.com/\" />"; 
echo "</head><body><br><br><br><div id='loading'><p><img src='loader.gif'>
Please wait 6 seconds...</p></div></body></html>";
?>
<script type="text/javascript">
// javascript refresh
window.setTimeout(function(){location.href="http://www.google.com";},5000);
</script>

วันอาทิตย์ที่ 25 มิถุนายน พ.ศ. 2560

เขียน SQL ใน MYSQL ให้แยกวัน-เดือน-ปี แบบไทย


เขียน SQL ใน MYSQL ให้แยกวัน-เดือน-ปี แบบไทย
 
r_date มีค่าเป็น 2017-06-01


SQL ดังนี้

select `plantreal24`.`r_date` AS `r_date`,
       dayofmonth(`plantreal24`.`r_date`) AS `thaiday`,
       (case
  when (month (`plantreal24`.`r_date`) = 1) then _utf8 'ม.ค.'
  when (month (`plantreal24`.`r_date`) = 2) then _utf8 'ก.พ.'
  when (month (`plantreal24`.`r_date`) = 3) then _utf8 'มี.ค.'
  when (month (`plantreal24`.`r_date`) = 4) then _utf8 'เม.ย.'
  when (month (`plantreal24`.`r_date`) = 5) then _utf8 'พ.ค.'
  when (month (`plantreal24`.`r_date`) = 6) then _utf8 'มิ.ย.'
  when (month (`plantreal24`.`r_date`) = 7) then _utf8 'ก.ค.'
  when (month (`plantreal24`.`r_date`) = 8) then _utf8 'ส.ค.'
  when (month (`plantreal24`.`r_date`) = 9) then _utf8 'ก.ค.'
  when (month (`plantreal24`.`r_date`) = 10) then _utf8 'ต.ค.'
  when (month (`plantreal24`.`r_date`) = 11) then _utf8 'พ.ย.'
  when (month (`plantreal24`.`r_date`) = 12) then _utf8 'ธ.ค.'
end) AS `thaimonth`,
       (year (`plantreal24`.`r_date`) + 543) AS `thaiyear`,
       `plantreal24`.`fore24` AS `fore24`,
       `plantreal24`.`no` AS `no`
from `plantreal24`
order by `plantreal24`.`no`

การใช้ RIGHT JOIN เพื่อดึงข้อมูลออกในแต่ละปี



ตัวอย่างข้อมูลใน TABLE



เขียน SQL  RIGHT JOIN ดังนี้

SELECT TB2.thaimonth, TB2.thaiyear, TB2.sum0 as Datas, TB1.thaiyear, TB1.sum1 as Datas2
FROM
(SELECT 
  sk24_all_month.r_date,
  sk24_all_month.thaimonth,
  sk24_all_month.thaiyear,
  sk24_all_month.sum_inflow24 as sum1
FROM
  sk24_all_month
WHERE
  sk24_all_month.thaiyear = 2560 ) as TB1
RIGHT JOIN(
(SELECT 
  sk24_all_month.r_date,
  sk24_all_month.thaimonth,
  sk24_all_month.thaiyear,
  sk24_all_month.sum_inflow24 as sum0
FROM
  sk24_all_month
WHERE
  sk24_all_month.thaiyear = 2559 ) as TB2
)ON(
TB2.thaimonth = TB1.thaimonth
)
  







//----------------------Sample---------------------------------------

$SQL1 = "SELECT l_curve.d_year, now_for.fore24 as now_year, l1_for.l1_fore24 as l1_year, l2_for.l2_fore24 as l2_year, l3_for.l3_fore24 as l3_year,
lmax_fore24.lmax_fore24 as max18_year, lmin_fore24.lmin_fore24 as min35_year, l_curve.uppers, l_curve.lowers, n_fore.n_fore, n_fore.r_date as n_date
FROM
(
SELECT 
all_sk_forebay5y.r_date,
all_sk_forebay5y.fore24
FROM
all_sk_forebay5y
WHERE
   YEAR(all_sk_forebay5y.r_date) = YEAR(CURDATE())) as now_for
RIGHT JOIN(
(SELECT
 all_sk_forebay5y.r_date,
 all_sk_forebay5y.fore24 as l1_fore24
FROM
 all_sk_forebay5y
WHERE
YEAR(all_sk_forebay5y.r_date) = YEAR(CURDATE())-1) as l1_for
)ON(
DayOfYear(now_for.r_date)= DayOfYear(l1_for.r_date)
)
RIGHT JOIN(
(SELECT
 all_sk_forebay5y.r_date,
 all_sk_forebay5y.fore24 as l2_fore24
FROM
 all_sk_forebay5y
WHERE
YEAR(all_sk_forebay5y.r_date) = YEAR(CURDATE()) - 2) as l2_for
)ON(
DayOfYear(l1_for.r_date)= DayOfYear(l2_for.r_date)
)
RIGHT JOIN(
(SELECT
 all_sk_forebay5y.r_date,
 all_sk_forebay5y.fore24 as l3_fore24
FROM
 all_sk_forebay5y
WHERE
YEAR(all_sk_forebay5y.r_date) = YEAR(CURDATE()) - 3) as l3_for
)ON(
DayOfYear(l1_for.r_date)= DayOfYear(l3_for.r_date)
)
RIGHT JOIN(
(SELECT
 all_sk_forebay5y.r_date,
 all_sk_forebay5y.fore24 as lmax_fore24
FROM
 all_sk_forebay5y
WHERE
YEAR(all_sk_forebay5y.r_date) = 1975) as lmax_fore24
)ON(
DayOfYear(l1_for.r_date)= DayOfYear(lmax_fore24.r_date)
)
RIGHT JOIN(
(SELECT
 all_sk_forebay5y.r_date,
 all_sk_forebay5y.fore24 as lmin_fore24
FROM
 all_sk_forebay5y
WHERE
YEAR(all_sk_forebay5y.r_date) = 1992) as lmin_fore24
)ON(
DayOfYear(l1_for.r_date)= DayOfYear(lmin_fore24.r_date)
)
JOIN(
SELECT ruledata_2555.d_year,
        ruledata_2555.upper as uppers,
        ruledata_2555.lower as lowers
FROM ruledata_2555
    WHERE ruledata_2555.dam = 'SK' ) as l_curve
    ON (l_curve.d_year =  DayOfYear(l1_for.r_date)) 
JOIN(
SELECT 
  all_sk_forebay5y.r_date,
  all_sk_forebay5y.fore24 as n_fore
FROM
  all_sk_forebay5y
ORDER BY
  all_sk_forebay5y.r_date DESC
LIMIT 1) as n_fore
ORDER BY l3_for.r_date ASC";
mysql_connect("localhost", "root", "adminxxx");
mysql_select_db("xxx");
$result1 = mysql_query($SQL1);
$a =0;
while ($row1= mysql_fetch_row($result1)) { //ดึงข้อมูลไปใช้งาน
$mydate[]  = $row1[0];
if(!$row1[1]==null){$fore24[] = $row1[1];}
//$fore24[]  = if($row1[1] == null){$row1[1] =0} else {$row1[1] =$row1[1]};
$l1_fore24[]  = $row1[2];
$l2_fore24[]  = $row1[3];
$l3_fore24[]  = $row1[4];
$max18_year[]  = $row1[5];
$min35_year[]  = $row1[6];
$uppers[]  = $row1[7];
$lowers[]  = $row1[8];
$m18 = max($max18_year); //หาข้อมูลใน Array ที่มีค่ามากที่สุด
$m35 = min($min35_year);//หาข้อมูลใน Array ที่มีค่าน้อยที่สุด
$n_fore = $row1[9];
$n_date = $row1[10];
}

การหาผลรวม Total ของข้อมูลใน Array ที่รับมาจาก Database


$SQL1 = "Select * FROM xxx";
mysql_connect("localhost", "root", "admin");
mysql_select_db("xxx");
$result1 = mysql_query($SQL1);
$a =0;
while ($row1= mysql_fetch_row($result1)) {
$mydate[]  = $row1[0];
if(!$row1[1]==null){$fore24[] = $row1[1];} //เช็ค Record ว่างหรือไม่
$l1_fore24[]  = $row1[2];
$l2_fore24[]  = $row1[3];
$l3_fore24[]  = $row1[4];
$l4_fore24[]  = $row1[5];
}


   $myc = count($l1_fore24);  // หาผลรวมของข้อมูลว่ามีจำนวนกี่ Record

   for($m=0;$m<=$myc;$m++)  
    {
$fore24_0 = ($fore24[$m])+$fore24_0;   //หาผลรวมของ Column แรก
$fore24_1 = ($l1_fore24[$m])+$fore24_1;
$fore24_2 = ($l2_fore24[$m])+$fore24_2;
$fore24_3 = ($l3_fore24[$m])+$fore24_3;
$fore24_4 = ($l4_fore24[$m])+$fore24_4;
}