$a_date = "$tahun-$bulan-01";
$lastdate= date('t',strtotime($a_date));//Y-m-t
<?php
require_once"koneksivar.php";
$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
if ($conn->connect_error) {
  trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}
function cekWeek($hari){
	$kategori="Weekday";
	if($hari=="Sabtu"||$hari=="Minggu"){
		$kategori="Weekend";	
	}
	return $kategori;
}
function getHari($tanggal){
	$dayOfWeek = date("l", strtotime($tanggal));
	$hari="Minggu";
	if($dayOfWeek=="Sunday"){$hari="Minggu";}
	elseif($dayOfWeek=="Monday"){$hari="Senin";}
	elseif($dayOfWeek=="Tuesday"){$hari="Selasa";}
	elseif($dayOfWeek=="Wednesday"){$hari="Rabu";}
	elseif($dayOfWeek=="Thursday"){$hari="Kamis";}
	elseif($dayOfWeek=="Friday"){$hari="Jumat";}
	elseif($dayOfWeek=="Saturday"){$hari="Sabtu";}
	return $hari;//."/$dayOfWeek"
	}
?>
<script src="ypathcss/sweetalert/sweetalert3.all.min.js"></script>
<link rel="stylesheet" href="ypathcss/sweetalert/sweetalert2.min.css">
<?php function RP($rupiah){return number_format($rupiah,"2",",",".");}?>
<?php
function WKT($sekarang){
$tanggal = substr($sekarang,8,2)+0;
$bulan = substr($sekarang,5,2);
$tahun = substr($sekarang,0,4);
$judul_bln=array(1=> "Januari", "Februari", "Maret", "April", "Mei","Juni", "Juli", "Agustus", "September","Oktober", "November", "Desember");
$wk=$tanggal." ".$judul_bln[(int)$bulan]." ".$tahun;
return $wk;
}
?>
<?php
function WKTP($sekarang){
$tanggal = substr($sekarang,8,2)+0;
$bulan = substr($sekarang,5,2);
$tahun = substr($sekarang,2,2);
$judul_bln=array(1=> "Jan", "Feb", "Mar", "Apr", "Mei","Jun", "Jul", "Agu", "Sep","Okt", "Nov", "Des");
$wk=$tanggal." ".$judul_bln[(int)$bulan]."'".$tahun;
return $wk;
}
?>
<?php
function BAL($tanggal){
	$arr=explode(" ",$tanggal);
	if($arr[1]=="Januari"||$arr[1]=="January"){$bul="01";}
	else if($arr[1]=="Februari"||$arr[1]=="February"){$bul="02";}
	else if($arr[1]=="Maret"||$arr[1]=="March"){$bul="03";}
	else if($arr[1]=="April"){$bul="04";}
	else if($arr[1]=="Mei"||$arr[1]=="May"){$bul="05";}
	else if($arr[1]=="Juni"||$arr[1]=="June"){$bul="06";}
	else if($arr[1]=="Juli"||$arr[1]=="July"){$bul="07";}
	else if($arr[1]=="Agustus"||$arr[1]=="August"){$bul="08";}
	else if($arr[1]=="September"){$bul="09";}
	else if($arr[1]=="Oktober"||$arr[1]=="October"){$bul="10";}
	else if($arr[1]=="November"){$bul="11";}
	else if($arr[1]=="Nopember"){$bul="11";}
	else if($arr[1]=="Desember"||$arr[1]=="December"){$bul="12";}
return "$arr[2]-$bul-$arr[0]";	
}
?>	
<?php
function BALP($tanggal){
	$arr=split(" ",$tanggal);
	if($arr[1]=="Jan"){$bul="01";}
	else if($arr[1]=="Feb"){$bul="02";}
	else if($arr[1]=="Mar"){$bul="03";}
	else if($arr[1]=="Apr"){$bul="04";}
	else if($arr[1]=="Mei"){$bul="05";}
	else if($arr[1]=="Jun"){$bul="06";}
	else if($arr[1]=="Jul"){$bul="07";}
	else if($arr[1]=="Agu"){$bul="08";}
	else if($arr[1]=="Sep"){$bul="09";}
	else if($arr[1]=="Okt"){$bul="10";}
	else if($arr[1]=="Nov"){$bul="11";}
	else if($arr[1]=="Nop"){$bul="11";}
	else if($arr[1]=="Des"){$bul="12";}
return "$arr[2]-$bul-$arr[0]";	
}
?>
<?php
function process($conn,$sql){
$s=false;
$conn->autocommit(FALSE);
try {
  $rs = $conn->query($sql);
  if($rs){
	    $conn->commit();
	    $last_inserted_id = $conn->insert_id;
 		$affected_rows = $conn->affected_rows;
  		$s=true;
  }
} 
catch (Exception $e) {
	echo 'fail: ' . $e->getMessage();
  	$conn->rollback();
}
$conn->autocommit(TRUE);
return $s;
}
function cekR($v1,$v2){
	$v=rand($v1,$v2);
	$x=$v;
	if($v<10){$x="0".$v;}
	return $x;
}
function getJum($conn,$sql){
  $rs=$conn->query($sql);
  $jum= $rs->num_rows;
	$rs->free();
	return $jum;
}
function getField($conn,$sql){
	$rs=$conn->query($sql);
	$rs->data_seek(0);
	$d= $rs->fetch_assoc();
	$rs->free();
	return $d;
}
function getData($conn,$sql){
	$rs=$conn->query($sql);
	$rs->data_seek(0);
	$arr = $rs->fetch_all(MYSQLI_ASSOC);
	//foreach($arr as $row) {
	//  echo $row['nama_kelas'] . '*<br>';
	//}
	$rs->free();
	return $arr;
}
function getAdmin($conn,$kode){
$field="nama_admin";
$sql="SELECT `$field` FROM `tb_admin` where `id_admin`='$kode'";
$rs=$conn->query($sql);	
	$rs->data_seek(0);
	$row = $rs->fetch_assoc();
	$rs->free();
    return $row[$field];
	}
function getKaryawan($conn,$kode){
$field="nama_karyawan";
$sql="SELECT `$field` FROM `tb_karyawan` where `id_karyawan`='$kode'";
$rs=$conn->query($sql);	
	$rs->data_seek(0);
	$row = $rs->fetch_assaoc();
	$rs->free();
    return $row[$field];
	}
function getRekanan($conn,$kode){
$field="nama_rekanan";
$sql="SELECT `$field` FROM `tb_rekanan` where `id_rekanan`='$kode'";
$rs=$conn->query($sql);	
	$rs->data_seek(0);
	$row = $rs->fetch_assoc();
	$rs->free();
    return $row[$field];
	}
function getMesin($conn,$kode){
$field="nama_rekanan";
$sql="SELECT `$field` FROM `tb_rekanan` where `id_mesin`='$kode'";
$rs=$conn->query($sql);	
	$rs->data_seek(0);
	$row = $rs->fetch_assoc();
	$rs->free();
    return $row[$field];
	}	
?>
============================
Implementasi:
$d=getField($conn,$sql);
		$id_absensi=$d["id_absensi"];
		$tanggal_masuk=WKT($d["tanggal_masuk"]);
		$jam_masuk=$d["jam_masuk"];
		$jam_pulang=$d["jam_pulang"];
		$status=$d["status"];
		$keterangan=$d["keterangan"]; 
		$hari=$d["hari"]; 
		$kategori=$d["kategori"]; 
		$lamakerja=$d["lamakerja"]; 
		$lembur=$d["lembur"]; 
		$kalibrasi=$d["kalibrasi"]; 
		$catatan=$d["catatan"]; 
		$notes="Working Hour";
		$ar1=explode(":",$jam_masuk);
		$j1=$ar1[0]+0;if($j1==0){$j1=24;}
		$m1=$ar1[1];
		$selj=$jammasuknormal-$j1;
		$menj=60-$m1;
		$early="$selj:$menj";
		if($selj<0){//terlambat
			$late=abs($selj).":$menj";
			$early="";
		} 
		else{
			$late="";
		}
		$ar2=explode(":",$jam_pulang);
		$j2=$ar2[0]+0;if($j2==0){$j2=24;}
		$m2=$ar2[1];
		$selj=$j2-$j1;
		$selm=abs($m2-$m1);if($selm<10){$selm="0".$selm;}
		$effect="$selj:$selm";
	}
=================
if($simpan === TRUE) {
	echo"<script>berhasil('absensi','Sukses Simpan');</script>";}
		else{echo"<script>gagal('absensi','Gagal Simpan');</script>";
}
Atau dari ref:
https://stackoverflow.com/questions/1686724/how-to-find-the-last-day-of-the-month-from-date
 
