ฉันพยายามแปลงวันที่yyyy-mm-dd
เป็นdd-mm-yyyy
(แต่ไม่ใช่ใน SQL); แต่ฉันไม่ทราบว่าฟังก์ชั่นวันที่ต้องการการประทับเวลาและฉันไม่สามารถรับการประทับเวลาจากสายนี้
เป็นไปได้อย่างไร?
ฉันพยายามแปลงวันที่yyyy-mm-dd
เป็นdd-mm-yyyy
(แต่ไม่ใช่ใน SQL); แต่ฉันไม่ทราบว่าฟังก์ชั่นวันที่ต้องการการประทับเวลาและฉันไม่สามารถรับการประทับเวลาจากสายนี้
เป็นไปได้อย่างไร?
คำตอบ:
ใช้strtotime()
และdate()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(ดูstrtotimeและเอกสารวันที่ในเว็บไซต์ PHP)
โปรดทราบว่านี่เป็นวิธีแก้ปัญหาอย่างรวดเร็วสำหรับคำถามเดิม สำหรับการแปลงที่ครอบคลุมมากขึ้นคุณควรใช้DateTime
คลาสเพื่อแยกวิเคราะห์และจัดรูปแบบ :-)
หากคุณต้องการหลีกเลี่ยงการแปลง strtotime (เช่น strtotime จะไม่สามารถแยกวิเคราะห์อินพุตของคุณ) คุณสามารถใช้
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
หรือเทียบเท่า:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
คุณให้รูปแบบเป็น $ dateString ก่อนจากนั้นคุณจะบอกรูปแบบที่คุณต้องการให้ $ newDateString อยู่
หรือถ้ารูปแบบต้นฉบับคือ "Ymd" (yyyy-mm-dd) ดังนั้นให้ใช้DateTime :
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- มันมีประโยชน์มากกว่าstrtotime()
strtotime()
มีประโยชน์สำหรับการแปลงรูปแบบประเภทที่แท้จริง (Ymd) เป็นรูปแบบอื่น ๆ แต่DateTime::createFromFormat()
เป็นสากล มันเหมือนSTR_TO_DATE
ใน MySQL
strtotime()
ใช้:
implode('-', array_reverse(explode('-', $date)));
หากไม่มีค่าใช้จ่ายในการแปลงวันที่ฉันไม่แน่ใจว่าจะมีความสำคัญมาก
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
รหัสนี้ใช้ได้กับทุกรูปแบบวันที่
คุณสามารถเปลี่ยนลำดับของตัวแปรทดแทนเช่น $ 3- $ 1- $ 2 เนื่องจากรูปแบบวันที่เก่าของคุณ
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
สำหรับข้อมูลเพิ่มเติมโปรดดูที่เอกสารstrtotime
หรือสั้นกว่า:
$new_date = date('d-m-Y', strtotime(your date variable));
ความเป็นไปได้อื่นที่ไม่ชัดเจนเช่นกัน:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
ฉันไม่รู้ว่าฉันจะใช้ แต่ยัง :)
หมายเหตุ : เนื่องจากบางครั้งคำตอบของโพสต์นี้ได้รับการอัปเดตฉันจึงกลับมาที่นี่เพื่อขอให้ผู้คนอย่าอัปโหลดอีกต่อไป คำตอบของฉันคือโบราณไม่ถูกต้องทางเทคนิคและมีหลายวิธีที่ดีกว่าที่นี่ ฉันเก็บมันไว้ที่นี่เพื่อจุดประสงค์ทางประวัติศาสตร์เท่านั้น
แม้ว่าเอกสารอธิบายฟังก์ชัน strtotime ไม่ดี แต่ @rjmunro ได้แก้ไขปัญหาในความคิดเห็นของเขาอย่างถูกต้อง: มันอยู่ในรูปแบบ ISO วันที่ "YYYY-MM-DD"
นอกจากนี้แม้ว่าฟังก์ชัน Date_Converter ของฉันอาจยังใช้งานได้ แต่ฉันขอเตือนว่าอาจมีข้อความที่ไม่ชัดเจนด้านล่างดังนั้นโปรดอย่าเพิกเฉย
คำตอบที่โหวตมากที่สุดนั้นผิดจริง!
คู่มือ strtotime PHP ที่นี่ระบุว่า "ฟังก์ชันคาดว่าจะได้รับสตริงที่มีรูปแบบวันที่ภาษาอังกฤษ" สิ่งที่จริงหมายถึงคือคาดว่าจะมีรูปแบบวันที่แบบอเมริกันของสหรัฐอเมริกาเช่น "mdY" หรือ "m / d / Y"
นั่นหมายความว่าวันที่ให้เป็น "YMD" strtotime
อาจได้รับการตีความโดย คุณควรระบุวันที่ในรูปแบบที่คาดหวัง
ฉันเขียนฟังก์ชันเล็กน้อยเพื่อคืนวันที่ในหลายรูปแบบ ใช้และแก้ไขตามประสงค์ หากใครเปลี่ยนเป็นห้องเรียนฉันก็ดีใจถ้ามันจะถูกแบ่งปัน
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's go ahead and get a string date in case we've
# been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
มีสองวิธีในการใช้สิ่งนี้:
1
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
คุณสามารถลองใช้strftime()
ฟังก์ชั่น ตัวอย่างง่ายๆ:strftime($time, '%d %m %Y');
ใช้ฟังก์ชันนี้เพื่อแปลงจากรูปแบบใด ๆ เป็นรูปแบบใด ๆ
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
รับด้านล่างเป็นโค้ด PHP ในการสร้างวันพรุ่งนี้โดยใช้mktime()
และเปลี่ยนรูปแบบในการวัน / เดือน / ปปปปecho
รูปแบบแล้วพิมพ์โดยใช้
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
คุณสามารถเปลี่ยนรูปแบบโดยใช้วันที่ () และ strtotime ()
$ date = '9/18/2019';
echo date ('dm-y', strtotime ($ date));
ผลลัพธ์:
18-09-19
เราสามารถเปลี่ยนรูปแบบโดยการเปลี่ยน (dmy)
สำหรับการแปลงเฉพาะนี้เรายังสามารถใช้สตริงรูปแบบ
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
เห็นได้ชัดว่าวิธีนี้ใช้ไม่ได้กับการแปลงรูปแบบวันที่อื่น ๆ แต่เนื่องจากเราเพิ่งจัดเรียงสตริงย่อยใหม่ในกรณีนี้จึงเป็นวิธีที่เป็นไปได้อีกวิธีหนึ่ง
strtotime()
ใช้ :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
ใช้วิธีง่าย ๆstrtotime()
และdate()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
กับเวลา
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
ใช้date_create
และdate_format
ลองสิ่งนี้
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}