|
|
|
ถามเรื่องการวนลูป ครับ ผมต้องการจะวนลูป ให้มันแสดงวันที่ ตั้งแต่ วันที่ 25 ถึง วันที่ 2 ทำยังไงครับ |
|
|
|
|
|
|
|
เอาคลาส เก่าที่ผมเขียนไปใช้นะ ผมว่าจะเขียนใหม่ แต่ยังไม่มีความจำเป็นเร่งด่วน
ว่าจะเขียนใหม่ เพราะเมธอด มันเยอะเกินไป และมีที่ไม่จำเป็นเยอะ แถมฟีเจอร์ยังไม่สมบูรณ์
เอาตัวนี้ไปก่อนละกัน
Code (PHP)
// Author Tawatchai Wongtom(http://gunner.freetzi.com)
class DateUtil{
const DATE = 1;
const DATETIME = 2;
const TIMESTAMP = 3;
const FULLDATE = 1;
const SHORTDATE = 2;
public $year, $month, $day, $hour, $minute, $second;
private $thai_full_months = array('01'=> 'มกราคม', '02'=> 'กุมภาพันธ์', '03'=> 'มีนาคม', '04'=> 'เมษายน', '05'=> 'พฤษภาคม', '06'=> 'มิถินายน', '07'=> 'กรกฎาคม', '08'=> 'สิงหาคม', '09'=> 'กันยายน', '10'=> 'ตุลาคม', '11'=> 'พฤษจิกายน', '12'=> 'ธันวาคม');
private $thai_short_months = array('01'=> 'ม.ค.', '02'=> 'ก.พ.', '03'=> 'มี.ค.', '04'=> 'เม.ย.', '05'=> 'พ.ค.', '06'=> 'มิ.ย.', '07'=> 'ก.ค.', '08'=> 'ส.ค.', '09'=> 'ก.ย.', '10'=> 'ต.ค.', '11'=> 'พ.ย.', '12'=> 'ธ.ค.');
public function __construct($year, $month, $day, $hour= '00', $minute= '00', $second= '00'){
$this->year = $year;
$this->month = $month;
$this->day = $day;
$this->hour = $hour;
$this->minute = $minute;
$this->second = $second;
}
//create and return DateUtil object, $type will be (date, datetime, timestamp), "now" is ok
//$str parameter format is only "Y-m-d" or "Y/m/d". If you want other format you should use "Constructor" instead.
public static function create($str, $type= self::DATE){
if($str == 'now')
return new DateUtil( date('Y'), date('m'), date('d'), date('H'), date('i'), date('s') );
$hour = '00'; $minute = '00'; $second = '00';
if($type == self::DATE){
list($year, $month, $day) = preg_split('/[-\/]/', $str);
}else if($type == self::DATETIME){
list($date, $time) = preg_split('/\s/', $str);
list($year, $month, $day) = preg_split('/[-\/]/', $date);
list($hour, $minute, $second) = preg_split('/:/', $time);
}else if($type == self::TIMESTAMP){
$timestamp = (int)$str;
$year = date('Y', $timestamp);
$month = date('m', $timestamp);
$day = date('d', $timestamp);
$hour = date('H', $timestamp);
$minute = date('i', $timestamp);
$second = date('s', $timestamp);
}
$month = substr('00'.$month, -2);
$day = substr('00'.$day, -2);
return new DateUtil($year, $month, $day, $hour, $minute, $second);
}// getDateUtil();
//return length between date as day absolute
public function dateDiff(DateUtil $date_compare){
$one_day_timestamp = 24*60*60;
return ceil( ($this->toTimestamp() - $date_compare->toTimestamp()) / $one_day_timestamp );
}
//format Y-m-d
public function toDate(){
return sprintf('%s-%s-%s', $this->year, $this->month, $this->day);
}
//format Y-m-d H:i:s
public function toDateTime(){
return sprintf('%s-%s-%s %s:%s:%s', $this->year, $this->month, $this->day, $this->hour, $this->minute, $this->second);
}
//return int Unix timestamp
public function toTimestamp(){
return mktime((int)$this->hour, (int)$this->minute, (int)$this->second, (int)$this->month, (int)$this->day, (int)$this->year);
}
public function toMySQLDate(){
return addslashes($this->toDate());
}
public function toMySQLDateTime(){
return addslashes($this->toDateTime());
}
public function toMySQLTimestamp(){
return (string)$this->toTimeStamp();
}
//for insert to MySQL database with difference format
public function toMySQLFormat($type= self::DATE){
if($type == self::DATE)
return $this->toMySQLDate();
else if($type == self::DATETIME)
return $this->toMySQLDateTime();
else if($type == self::TIMESTAMP)
return $this->toMySQLTimestamp();
}
//Thai date, format d m Y
public function toThaiDate($type= self::FULLDATE){
$year = $this->year + 543;
$month = ($type == self::FULLDATE) ? $this->thai_full_months[$this->month] : $this->thai_short_months[$this->month];
return sprintf('%d %s %s', $this->day, $month, $year);
}
//Eng date, format Y-m-d
public function toEngDate($type= self::FULLDATE){
$month_format = ($type == self::FULLDATE) ? 'F' : 'M';
$timestamp = mktime(0, 0, 0, (int)$this->month, (int)$this->day, (int)$this->year);
$day = (int)$this->day;
if( $type == self::FULLDATE ){
switch( $day ){
case 1: $numstr = 'st'; break;
case 2: $numstr = 'nd'; break;
case 3: $numstr = 'rd'; break;
default: $numstr = 'th';
}
$day = $day.$numstr;
}
return sprintf('%s %s, %s', date($month_format, $timestamp), $day, $this->year);
}
//return time format H:i:s
public function whatsTime(){
return sprintf('%s:%s:%s', $this->hour, $this->minute, $this->second);
}
//return new DateUtil instance with add Days
public function addDay($day){
$day = (int)$day;
$time_stamp = strtotime('+'.$day.' day', $this->toTimestamp());
return DateUtil::create(date('Y-m-d', $time_stamp));
}
//return the same as DateUtil#toDateTime
public function __toString(){
return $this->toDateTime();
}
}
// ตัวอย่าง ใช้การใช้งาน
$start_date = DateUtil::create('2009-11-6');
$end_date = DateUtil::create('2009-12-6');
do{
echo $start_date->toThaiDate(), '<br>';
$start_date = $start_date->addDay(1);
}while($start_date->dateDiff($end_date) != 1);
หมายเหตุ DateUtil::create() รับเฉพาะ Y-m-d หรือ Y/m/d นะครับ และต้องเป็น ค.ศ. ด้วยนะคับ
มันเรื่องมาก เมธอด ก็จำยาก เลย อยากจะเขียนใหม่ แต่ตัวนี้ก็พอใช้ได้
|
|
|
|
|
Date :
2009-11-06 16:15:49 |
By :
pjgunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|