เขียน shortcode คำนวนเวลา

คำถาม สวัสดีครับ ขอสอบถามปลั๊กอินครับ

ความต้องการคืออยากให้มันคำนวณเวลาให้เองครับ เช่นผมมีข้อมูลระยะเวลาก่อสร้าง
– ระยะเวลาก่อสร้างตามสัญญา 720 วัน
– ดำเนินงานก่อสร้างมาแล้ว 59 วัน (คิดเป็นร้อยละ 8.19 ของระยะเวลาก่อสร้างทั้งหมด)
– คงเหลือระยะเวลาก่อสร้าง 661 วัน (คิดเป็นร้อยละ 91.81 ของระยะเวลาก่อสร้างทั้งหมด)

เราใส่วันเริ่มและวันสิ้นสุด แล้วมันจะคำนวณวันที่ผ่านมาให้เองทุกวัน แบบนี้ต้องใช้ปลั๊กอินอะไรครับ

ตอบ ถ้าหาคงจะนาน เขียน code ให้เลย

ส่วนนี้เอาไปไว้ใน functions.php ครับ

function fn_structiondate( $atts ){
	$start_date 		= new DateTime( $atts['startdate'] );
	$end_date 			= new DateTime( $atts['enddate'] );
	$current_date 	= new DateTime();
	
	$total_date 		= $end_date->diff($start_date)->format("%a");

	if( $current_date < $start_date ){
		$passed_date 	= $next_date = 0;
	}else if( $current_date > $start_date and $current_date < $end_date ){
		$passed_date 	= $current_date->diff($start_date)->format("%a");
		$next_date 		= $total_date - $passed_date;
	}else{
		$next_date 		= $total_date;
		$passed_date 	= $total_date;
	}

	$output  = '';
	$output .= 'ระยะเวลา '.$atts['startdate'].' - '.$atts['enddate'].'<br>';
	
	$output .= 'ระยะเวลาก่อสร้างตามสัญญา '.$total_date.' วัน'.'<br>';
	$output .= 'ดำเนินงานก่อสร้างมาแล้ว '.$passed_date.' วัน'.'<br>';
	$output .= '(คิดเป็นร้อยละ '.round(($passed_date/$total_date)*100,2).' ของระยะเวลาก่อสร้างทั้งหมด)'.'<br>';
	
	$output .= 'คงเหลือระยะเวลาก่อสร้าง '.$next_date.' วัน'.'<br>';
	$output .= '(คิดเป็นร้อยละ '.round(($next_date/$total_date)*100,2).' ของระยะเวลาก่อสร้างทั้งหมด)'.'<br>';
	
	
	return $output;
}
add_shortcode( 'structiondate', 'fn_structiondate' );

ส่วนการเรียกใช้ ก็ใส่ในเว็บปกติ

[structiondate startdate="2018-04-10" enddate="2018-04-30"]

อีกแบบ ด้วยความคุ้นเคย อยากใช้ พศ ก็แก้ไขนิดหนอ่ยครับ โดยการเปลี่ยน ปี พศ เป็น คศ แล้วเอาค่าไปคำนวนเหมือนเดิม

function fn_structiondate( $atts ){
  $startdate_arr = explode("-", $atts['startdate']);
  $enddate_arr   = explode("-", $atts['enddate']);

  $start_date     = new DateTime( ($startdate_arr[2]-543).'-'.$startdate_arr[1].'-'.$startdate_arr[0] );
  $end_date       = new DateTime( ($enddate_arr[2]-543).'-'.$enddate_arr[1].'-'.$enddate_arr[0] );
  $current_date   = new DateTime();
	
  $total_date     = $end_date->diff($start_date)->format("%a");

  if( $current_date < $start_date ){
    $passed_date 	= $next_date = 0;
  }else if( $current_date > $start_date and $current_date < $end_date ){
    $passed_date 	= $current_date->diff($start_date)->format("%a");
    $next_date 		= $total_date - $passed_date;
  }else{
   $next_date 		= $total_date;
   $passed_date 	= $total_date;
  }
  $output  = '';
  $output .= 'ระยะเวลา '.$atts['startdate'].' - '.$atts['enddate'].'<br>';	
  $output .= 'ระยะเวลาก่อสร้างตามสัญญา '.$total_date.' วัน'.'<br>';
  $output .= 'ดำเนินงานก่อสร้างมาแล้ว '.$passed_date.' วัน'.'<br>';
  $output .= '(คิดเป็นร้อยละ '.round(($passed_date/$total_date)*100,2).' ของระยะเวลาก่อสร้างทั้งหมด)'.'<br>';	
  $output .= 'คงเหลือระยะเวลาก่อสร้าง '.$next_date.' วัน'.'<br>';
  $output .= '(คิดเป็นร้อยละ '.round(($next_date/$total_date)*100,2).' ของระยะเวลาก่อสร้างทั้งหมด)'.'<br>';
  return $output;
}
add_shortcode( 'structiondate', 'fn_structiondate' );

ส่วนการเรียกใช้ ก็ใส่ในเว็บปกติ วว-ดด-ปปปป

[structiondate startdate="10-04-2561" enddate="30-04-2561"]

Leave a Reply

Your email address will not be published. Required fields are marked *