|
|
|
สอบถามสูตรจาก MS Excel แปลงตัวเลขเป็นเวลา ในภาษา PHP ใช้สูตรการคำนวณอย่างไรครับ |
|
|
|
|
|
|
|
ช่อง A
88 -> 88 วัน 0 ชม.
438:51 -> 18 วัน 6.51 ชม. -> 18.285 วัน
4:59 -> 0 วัน 4:59 ชม. -> 0.21 วัน
ชอบๆ ปริศนาถอดรหัสแบบนี้ ชอบ
|
|
|
|
|
Date :
2014-08-26 10:06:04 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เทียบบัญญัติไตรยางค์สิตัวเอง
hint: เทียบแยกกันระหว่าง ชม. กับ นาที เสร็จแล้วค่อยมาบวกกัน
|
|
|
|
|
Date :
2014-08-26 10:40:16 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วครับ ขอบคุณมากครับ Guest ผู้มาเยือน
|
|
|
|
|
Date :
2014-08-26 11:27:34 |
By :
nPointXer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<form method="post" action="">
แปลงตัวเลขเป็นเวลา <input type="text" name="c"> <input type="submit" value="แปลง">
</form>
<?php
if($_POST['c']){
$n=($_POST['c']);
echo"ตัวเลข $n =";
$t=$n*24;
$a=explode(".",$t);
$b=$a[0];
$c=$t-$b;
$t2=$c*60;
echo" $b : $t2";
}
?>
|
|
|
|
|
Date :
2014-08-26 11:50:23 |
By :
chai19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอเอาเลข 0.09 มาแปลง มันไม่ได้ 2:08 มันกลับได้ 2:8 หรือ 2:9(ถ้าปัด) แทน เหมือนโปรแกรมตัด 0 หน้า 8 ออกตอนคำนวณ ก่อนบวกกันครับ มีวิธีแก้ไหมครับ
|
|
|
|
|
Date :
2014-08-28 11:13:52 |
By :
nPointXer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$val = 0.09;
echo $val;
echo '<br />';
echo toNum($val);
echo '<br />';
echo toTime($val);
function toNum($val) {
$int = floor($val);
$dec = intval(substr(strval($val - $int), 2));
return ($int / 24) + ($dec / (60 * 24));
}
function toTime($val) {
$int = floor($val * 24);
$dec = doubleval('0.' . strval(($result - $rint) * 60));
return $rint + $rdec;
}
|
|
|
|
|
Date :
2014-08-28 16:48:16 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขครับ เขียนตัวแปรสลับกันมั่วไปหน่อย
ถ้าเขียนโปรแกรมผมจาเขียนfunctionงี้อ่ะ
Code (PHP)
function numDate_to_dateTime($time){
$sum = $time*1440;
$hr = int($sum/60);
$min = int($sum%60) //($sum mod 60);
$string = $hr.'.'.$min;
$result = (float)$string;
return $result
}
numDate_to_dateTime(18.28542);
ถ้าจะเอาวันก็เอา $hr ไปหาร 24 ต่อ ผมอาจจะผิดคลาดเคลื่อนตอนแปลง int แหละครับ ลองดูนะครับเผื่อช่วยได้
ถ้าจะทำกลับจากเวลาเป็น ตัวเลข
Code (PHP)
function dateTime_to_numDate($hr,$min){
$sum = $hr*60;
$sum+=$min;
$result = $sum/1440;
return $result
}
dateTime_to_numDate(438,51);
|
ประวัติการแก้ไข 2014-08-28 18:17:33
|
|
|
|
Date :
2014-08-28 18:05:35 |
By :
tlecreate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<form method="post" action="">
แปลงตัวเลขเป็นเวลา <input type="text" name="c"> <input type="submit" value="แปลง">
</form>
<?php
if($_POST['c']){
$n1=($_POST['c']);
$a=explode(".",$n1);
$n=$n1-$a[0];
$t=$n*24;
$a=explode(".",$t);
$b=$a[0];
$c=$t-$b;
$t2=$c*60;
$t=floor($t2);
if($b<10){
$b= "0$b";
}
if($t<10){
$t= "0$t";
}
echo"ตัวเลข $n1 = $b : $t";
}
?>
|
ประวัติการแก้ไข 2014-08-28 23:45:06
|
|
|
|
Date :
2014-08-28 23:27:30 |
By :
chai19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก่อนนอน สมองมันแล่น เลยคิดอะไรเพลินๆออกครับ
มีสูตรง่ายๆเลย
คือเอาตัวเลขไป x 24
ตัวหน้าคือ ชั่วโมง แล้วเฉพาะ ทศนิยม มา x 60 จะได้เป็นนาที ครับ ลองดูครับ
0.207789
1. ชม. 0.207789 * 24 เวลา = 4.986936 ตัดทศนิยมออก = 4 ชม.
2.นาที 0.986936*60 = 59.21616 นาที
รวมได้ 4.59
18.28542
1. ชม. 18.28542 * 24 เวลา = 438.85008 ตัดทศนิยมออก = 438 ชม.
2.นาที 0.85008*60 = 51.0048 นาที
รวมได้ 438.51
เขียนโปรแกรมก็
Code (PHP)
//ตัวเลขเป็นเวลา
function num_to_time($num){
$hr = (int)($num*24);
$min = (($num*24)-$hr)*60;
$time = $hr.":".$min;
return $time;
}
echo '<br/>'.num_to_time(18.28542);
//เวลาเป็นตัวเลข
function time_to_num($time){
$time = explode(':',$time);
$num = (($time[1]/60)+$time[0])/24;
return $num;
}
echo '<br/>'.time_to_num('438:51.0048');
|
ประวัติการแก้ไข 2014-08-29 01:57:49
|
|
|
|
Date :
2014-08-29 01:16:12 |
By :
tlecreate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขแระ เมื่อวานรีบกลับบ้าน
Code (PHP)
<?php
$val = 2.08;
$num = toNum($val);
$time = toTime($num);
echo "Time: $val";
echo '<br />';
echo "to Num: $num";
echo '<br />';
echo "to Time: $time";
function toNum($val) {
$x = floor($val);
$int = $x / 24;
$dec = (($val - $x) * 100) / 1440;
return $int + $dec;
}
function toTime($val) {
$x = $val * 24;
$int = floor($x);
$dec = (($x - $int) * 60) / 100;
return $int + $dec;
}
//result
//==============
//Time: 2.08
//to Num: 0.088888888888889
//to Time: 2.08
?>
|
|
|
|
|
Date :
2014-08-29 09:21:49 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class timeSpan for PHP
โครงสร้างตามนี้ http://msdn.microsoft.com/en-us/library/system.timespan%28v=vs.110%29.aspx
ส่วนวิธีใช้ ติดไว้ก่อนจะรีบกลับบ้านแระ แต่ก็คล้ายๆ ของใน msdn นั่นแหละ
classes\properties.php
<?php
namespace classes;
class properties {
public function __get($key) {
if (method_exists($this, $method = 'get_' . $key)) {
return $this->$method();
} else {
trigger_error($key . ' is not avaliable .', E_USER_ERROR);
}
}
public function __set($key, $value) {
if (method_exists($this, $method = 'set_' . $key)) {
return $this->$method($value);
} else {
trigger_error($key . ' is not avaliable .',E_USER_ERROR);
}
}
}
?>
classes\timeSpan.php
<?php
namespace classes;
class timeSpan extends properties {
const ticksPerDay = 864000000000;
const ticksPerHour = 36000000000;
const ticksPerMiniute = 600000000;
const ticksPerSecond = 10000000;
const ticksPerMillisecond = 10000;
private $_days;
private $_hours;
private $_minutes;
private $_seconds;
private $_milliseconds;
private $_totalDays;
private $_totalHours;
private $_totalMinutes;
private $_totalSeconds;
private $_totalMilliseconds;
private $_ticks;
// properties
public function get_days() {
return $this->_days;
}
public function get_hours() {
return $this->_hours;
}
public function get_minutes() {
return $this->_minutes;
}
public function get_seconds() {
return $this->_seconds;
}
public function get_milliseconds() {
return $this->_milliseconds;
}
public function get_ticks() {
return $this->_ticks;
}
public function get_totalDays() {
return $this->totalDays;
}
public function get_totalHours() {
return $this->_totalHours;
}
public function get_totalMinutes() {
return $this->_totalMinutes;
}
public function get_totalSeconds() {
return $this->_totalSeconds;
}
public function get_totalMilliseconds() {
return $this->_totalMilliseconds;
}
// constructor
public function __construct($days = 0, $hours = 0, $minutes = 0, $seconds = 0, $milliseconds = 0) {
$this->construct($days, $hours, $minutes, $seconds, $milliseconds);
}
protected function construct($days, $hours, $minutes, $seconds, $milliseconds) {
$this->_totalMilliseconds = ($days * 86400000) + ($hours * 3600000) + ($minutes * 60000) + ($seconds * 1000) + $milliseconds;
$this->_totalSeconds = $this->_totalMilliseconds / 1000;
$this->_totalMinutes = $this->_totalSeconds / 60;
$this->_totalHours = $this->_totalMinutes / 60;
$this->_totalDays = $this->_totalHours / 24;
$this->_ticks = $this->_totalMilliseconds * 10000;
$d = floor($this->_totalDays); $hx = ($this->_totalDays - $d) * 24;
$h = floor($hx); $mx = ($hx - $h) * 60;
$m = floor($mx); $sx = ($mx - $m) * 60;
$s = floor($sx);
$i= ($sx - $s) * 1000;
$this->_milliseconds = ($i >= 999.0) ? 0 : ($i % 100 === 99) ? floor($i) + 1 : floor($i);
$this->_seconds = ($i >= 999.0) ? ($s + 1 > 59.0) ? 0 : $s + 1 : $s;
$this->_minutes = ($i >= 999.0 && $s + 1 > 59.0) ? ($m + 1 > 59.0) ? 0 : $m + 1 : $m;
$this->_hours = ($i >= 999.0 && $s + 1 > 59.0 && $m + 1 > 59.0) ? ($h + 1 > 23.0) ? 0 : $h + 1 : $h;
$this->_days = ($i >= 999.0 && $s + 1 > 59.0 && $m + 1 > 59.0 && $h + 1 > 23.0) ? $d + 1 : $d;
}
// overload constructor
protected static function overloadConstuct($value) {
$days = floor($value); $hx = ($value - $days) * 24;
$hours = floor($hx); $mx = ($hx - $hours) * 60;
$minutes = floor($mx); $sx = ($mx - $minutes) * 60;
$seconds = floor($sx);
$milliseconds = floor(($sx - $seconds) * 1000);
return new self($days, $hours, $minutes, $seconds, $milliseconds);
}
public static function fromDays($value) {
return self::overloadConstuct($value);
}
public static function fromHours($value) {
return self::overloadConstuct($value / 24);
}
public static function fromMinutes($value) {
return self::overloadConstuct($value / 1440);
}
public static function fromSeconds($value) {
return self::overloadConstuct($value / 86400);
}
public static function fromMilliseconds($value) {
return self::overloadConstuct($value / 86400000);
}
public static function fromTicks($value) {
return self::overloadConstuct($value / 864000000000);
}
// static method
public static function compare(timeSpan $t1, timeSpan $t2) {
// -1 = t1 is shorter than t2.
// 0 = t1 is equal to t2.
// 1 = t1 is longer than t2.
return ($t1->totalMilliseconds !== $t2->totalMilliseconds) ? ($t1->totalMilliseconds < $t2->totalMilliseconds) ? -1 : 1 : 0;
}
// method
public function compareTo(timeSpan $value) {
return self::compare($this, $value);
}
public function add(timeSpan $value) {
$days = $this->_days + $value->days;
$hours = $this->_hours + $value->hours;
$minutes = $this->_minutes + $value->minutes;
$seconds = $this->_seconds + $value->seconds;
$milliseconds = $this->_milliseconds + $value->milliseconds;
$this->construct($days, $hours, $minutes, $seconds, $milliseconds);
}
public function subtract(timeSpan $value) {
$days = $this->_days - $value->days;
$hours = $this->_hours - $value->hours;
$minutes = $this->_minutes - $value->minutes;
$seconds = $this->_seconds - $value->seconds;
$milliseconds = $this->_milliseconds - $value->milliseconds;
$this->construct($days, $hours, $minutes, $seconds, $milliseconds);
}
// magic method
public function __toString() {
return (($this->_days === 0) ? '' : "{$this->_days}:") .
str_pad($this->_hours, 2, '0', STR_PAD_LEFT) . ':' .
str_pad($this->_minutes, 2, '0', STR_PAD_LEFT) . ':' .
str_pad($this->_seconds, 2, '0', STR_PAD_LEFT) .
((($this->_milliseconds === 0) ? '' : '.' . str_pad($this->_milliseconds, 7, '0', STR_PAD_RIGHT)));
}
}
?>
|
|
|
|
|
Date :
2014-08-29 16:59:52 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|