Fungsi microtime() mengembalikan cap waktu Unix saat ini dengan mikrodetik. Secara default, fungsi ini mengembalikan nilai string yang berisi mikrodetik dan detik yang dipisahkan oleh spasi (msec detik)
Sintaksis
microtime($get_as_float)Parameter
Sr. No Parameter dan Keterangan 1get_as_float(Opsional)
Ini adalah nilai boolean yang digunakan untuk menentukan apakah hasilnya harus berupa nilai floating point atau tidak. Jika Anda melewatkan nilai boolean true sebagai parameter, fungsi ini mengembalikan hasil sebagai nilai floating point
Nilai Pengembalian
Fungsi microtime PHP () mengembalikan stempel waktu Unix saat ini. Secara default ini mengembalikan nilai string dalam bentuk msec detik. Jika Anda meneruskan nilai boolean true sebagai parameter ke metode ini, metode ini mengembalikan waktu saat ini dalam detik sejak zaman Unix akurat ke mikrodetik terdekat
Example displaying each time format:
$dateTime = new DateTime();
foreach ([
'ATOM',
'COOKIE',
'ISO8601',
'RFC822',
'RFC850',
'RFC1036',
'RFC1123',
'RFC2822',
'RFC3339',
'RFC3339_EXTENDED',
'RSS',
'W3C',
] as $format) {
eval("print 'DateTimeInterface::$format\t'.\$dateTime->format(DateTimeInterface::$format).\"\n\";");
}
The above example will output:
DateTimeInterface::ATOM 2020-01-28T16:22:37-07:00
DateTimeInterface::COOKIE Tuesday, 28-Jan-2020 16:22:37 MST
DateTimeInterface::ISO8601 2020-01-28T16:22:37-0700
DateTimeInterface::RFC822 Tue, 28 Jan 20 16:22:37 -0700
DateTimeInterface::RFC850 Tuesday, 28-Jan-20 16:22:37 MST
DateTimeInterface::RFC1036 Tue, 28 Jan 20 16:22:37 -0700
DateTimeInterface::RFC1123 Tue, 28 Jan 2020 16:22:37 -0700
DateTimeInterface::RFC2822 Tue, 28 Jan 2020 16:22:37 -0700
DateTimeInterface::RFC3339 2020-01-28T16:22:37-07:00
DateTimeInterface::RFC3339_EXTENDED 2020-01-28T16:22:37.803-07:00
DateTimeInterface::RSS Tue, 28 Jan 2020 16:22:37 -0700
DateTimeInterface::W3C 2020-01-28T16:22:37-07:00
belum dibaca
Hai,
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, bagaimanapun
memiliki beberapa masalah
Tidak ada cara mudah untuk menyetel mikrodetik ke 0, Anda harus menelepon
setTime lihat https. //3v4l. org/YUhFF Metode setMicroseconds adalah
berguna dan/atau mendukung string relatif untuk menyetel mikrodetik ke 0 (hanya
seperti tengah malam untuk H. i. s). Atau apakah saya melewatkan sesuatu?Dukungan mikrodetik berguna, menurut saya bukan secara default. Kenapa tidak
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?
penamaan yang sangat mewah, tetapi sangat jelas apa yang akan terjadiParameter ke-4 untuk setTime() seharusnya tidak menyebabkan kerusakan BC
Diskusi ini dimulai di https. //github. com/php/php-src/pull/2186
Gr Arjen
belum dibaca Hai, Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki Pemahaman saya adalah jika ini memengaruhi kode Anda, maka kode Anda Saya tidak sepenuhnya mengerti masalah apa yang ingin Anda selesaikan tulis SjonHortensius jika menghasilkan DateTime membutuhkan sekitar 4 μs (yang memang untuk saya), ini terjadi ~ 250. 000 kali Memiliki bug lebih sering terjadi adalah hal yang baik. Itu menghentikan Anda dari Saya menyadari bahwa memiliki rilis membuatnya lebih jelas bahwa kode rusak tulis dshafik Saya pikir mikrodetik default ke 0 ketika tidak spesifik untuk string relatif adalah perilaku yang benar Saya tidak berpikir itu terdengar seperti rencana yang bagus sama sekali. Saat membuat a Bukankah memiliki mikrodetik berperilaku berbeda dengan yang lainnya Bersulang untuk ($i=0; $iformat('U')) "Hanya mengandalkan hal-hal yang dapat diandalkan. " Arjen Hai, Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki Pemahaman saya adalah jika ini memengaruhi kode Anda, maka kode Anda Saya tidak sepenuhnya mengerti masalah apa yang ingin Anda selesaikan tulis SjonHortensius jika menghasilkan DateTime membutuhkan sekitar 4 μs (yang memang untuk saya), ini terjadi ~ 250. 000 kali Memiliki bug lebih sering terjadi adalah hal yang baik. Itu menghentikan Anda dari Saya menyadari bahwa memiliki rilis membuatnya lebih jelas bahwa kode rusak tulis dshafik Saya pikir mikrodetik default ke 0 ketika tidak spesifik untuk string relatif adalah perilaku yang benar Saya tidak berpikir itu terdengar seperti rencana yang bagus sama sekali. Saat membuat a Bukankah memiliki mikrodetik berperilaku berbeda dengan yang lainnya Bersulang untuk ($i=0; $iformat('U')) Karena Anda membebani kelas DateTime, itu hanya minor Bersulang, belum dibaca Hai, Saya pikir Anda membuat beberapa asumsi buruk di sini Tolong jangan top-reply pada daftar ini Contoh yang diberikan oleh Sjon adalah Mereka sudah bisa istirahat. Sebagai Dan menulis lebih baik Memiliki bug lebih sering terjadi adalah hal yang baik. Itu berhenti Kami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir Menganggap serius bukan berarti harus setuju Menganggap serius berarti membaca pesan lengkap dan tidak Tidak ada komentar tentang tidak dapat menyetel microtime ke nol PHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $ kucing doo. php [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $php -n doo. php Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL, $mikrodetik = NULL) di /tmp/doo. php pada baris 9 Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
1 di PHP 7. 0 [PHP. 5. 6. 28-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov Saya pikir itu TIDAK melanggar (dan karenanya peringatan) LSP. Jika Anda LAKUKAN menggunakan "[. ] jika S adalah subtipe dari T, maka objek bertipe T dapat diganti A. $tanggal = TanggalWaktu baru; Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak Ini dulu bekerja selama 7 tahun, dan sekarang tidak. Jika saya tidak disimpan Di mana ini memiliki asumsi yang buruk? Asumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik Pertama, hampir tidak mungkin membuat objek DateTime dengan Ini sudah terjadi sejak 5. 3. 1. Anda tidak dapat memperdebatkan DateTime dengan serius DateTime memiliki cara yang tidak jelas untuk menginisialisasi dengan waktu saat ini Apakah Anda pernah meng-Google "situs mikrodetik. php. bersih/manual";? Membuat asumsi DateTime mendukung microtime hanya akan didasarkan pada Lihat https. //3v4l. org/aCRU0 dan https. //3v4l. org/4Oid8 [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $cat doo2. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $php -n doo2. php Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a Karena Anda membebani kelas DateTime, itu hanya minor Bersulang,
beberapa isu
sudah memiliki asumsi buruk di dalamnya. Kode salah berasumsi
bahwa dua DateTime yang dihasilkan akan memiliki waktu yang sama
keduanya. *
diskusi ini. Tidak ada yang memaksa Anda untuk memperbarui ke PHP 7. 1
langsung;
asumsi buruk tentang waktu di DateTime yang dihasilkan sebelum Anda
tingkatkan ke PHP7. 1
lebih sering
mengabaikan kasus tepi dan pemrograman secara kebetulan. **
rusak adalah hal yang menjengkelkan harus diperbaiki. tapi kode itu
sudah salah. Menunda fitur yang berguna, hanya untuk menghindari keharusan memperbaiki
kode yang tidak stabil bukanlah cara yang baik untuk melanjutkan proyek, imo
DateTime hingga > Having bugs happen more frequently is a good thing. It stops
> you from ignoring edge cases and programming by coincidence.
_8 hanya
nilai tanggal diatur dari string input, sisa waktu diatur
sampai sekarang()
nilai waktu akan langsung menjadi bagian tambahan dari inkonsistensi
orang untuk menyesal?
Dan
berkurang, menjadi kurang jelas bahwa kode tersebut rusak, tetapi memang demikian
masih rusak
beberapa isu
sudah memiliki asumsi buruk di dalamnya. Kode salah berasumsi
bahwa dua DateTime yang dihasilkan akan memiliki waktu yang sama
keduanya. *
diskusi ini. Tidak ada yang memaksa Anda untuk memperbarui ke PHP 7. 1
langsung;
asumsi buruk tentang waktu di DateTime yang dihasilkan sebelum Anda
tingkatkan ke PHP7. 1
lebih sering
mengabaikan kasus tepi dan pemrograman secara kebetulan. **
rusak adalah hal yang menjengkelkan harus diperbaiki. tapi kode itu
sudah salah. Menunda fitur yang berguna, hanya untuk menghindari keharusan memperbaiki
kode yang tidak stabil bukanlah cara yang baik untuk melanjutkan proyek, imo
DateTime hingga > Having bugs happen more frequently is a good thing. It stops
> you from ignoring edge cases and programming by coincidence.
_8 hanya
nilai tanggal diatur dari string input, sisa waktu diatur
sampai sekarang()
nilai waktu akan langsung menjadi bagian tambahan dari inkonsistensi
orang untuk menyesal?
Dan
berkurang, menjadi kurang jelas bahwa kode tersebut rusak, tetapi memang demikian
masih rusak
ketidaknyamanan
Derick
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancur
Anda dari mengabaikan kasus tepi dan pemrograman secara kebetulan
umpan balik harus ditanggapi dengan serius
berfokus pada detail contoh (https. //3v4l. org/YUhFF menghadapi
masalah yang sama tanpa argumen konstruktor; . g. tidak mudah diatur
mikrodetik ke 0). Saya tidak pernah mengatakan kami menghadapi DateTime baru == baru
Masalah DateTime, tapi Dan memberikan pelajaran tentang asumsi yang buruk
parameter (poin 3). SM istirahat
eksekusi sudah benar
objek(TanggalKu)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 30. 06. 371428"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(TanggalKu)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 02. 10. 10. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
Standar Ketat. Deklarasi MyDate. setTime() harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
Argumen mikrodetik ke-4 dalam aplikasi Anda, Anda tidak dapat mengganti a
objek DateTime dengan CustomDate yang tidak memiliki argumen ke-4 ini,
bahkan DateTime yang tangguh memiliki nilai default untuk itu. Jika Anda ingin menyimpan a
waktu dengan mikrodetik dengan setTime, Anda berakhir tanpa mikrodetik jika
Anda mengganti DateTime dengan CustomDate
dengan objek bertipe S (i. e. , objek bertipe T dapat diganti
dengan objek subtipenya dari tipe S) tanpa mengubah salah satu dari
properti yang diinginkan dari program itu (kebenaran, tugas yang dilakukan, dll. )"
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
detik, itu tidak akan berhasil selama 7 tahun
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kode
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
waktu saat ini DENGAN set mikrodetik (DateTime. createFromFormat('U. kamu',
sprintf('%. f', waktu mikro(benar)));
rumit untuk membuat objek DateTime tanpa mikrodetik
diinisialisasi/diset ke 0. Tanggal Waktu. buatDariFormat('U', [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
4);
Tanggal Waktu('@'. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_4);
selalu memiliki presisi mikrodetik dan memperbaiki inisialisasi
hampir 7 tahun
termasuk mikrodetik, __construct() default tidak menunjukkan tanda
dukungan mikrodetik. Mengubah perilaku ini 7 tahun setelah perkenalan
tidak bisa disebut perbaikan bug (apakah ini masuk ke 5. 6 dan 7. 0 juga?),
itu hanya fitur
Hanya dokumentasi (tidak termasuk komentar) tentang createFromFormat
menyebutkan 'mikrodetik'
detail internal yang tidak terdokumentasi. ITU akan menjadi asumsi yang buruk
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 39. 04. 123456"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))
ketidaknyamanan
Derick
belum dibaca
Hai Dan,
Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
Mereka sudah rusak. Itulah intinya
Jarang pemicu kerusakan saat ini tetapi akan memicu
Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
belum dibaca Hai Dan, Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh Mereka sudah rusak. Itulah intinya Jarang pemicu kerusakan saat ini tetapi akan memicu Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat Saya telah mendiskusikan hal ini dengan Joe, dan kami setuju dengan peringatan BC break; Kami pasti harus mendokumentasikan beberapa praktik terbaik seputar tanggal relatif, Terima kasih,
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
yang lainnya tidak dianggap sebagai jeda BC
e. g. menggunakan tengah malam, atau mengatur waktu secara eksplisit
belum dibaca
Hei Arjen,
Tidak ada cara mudah untuk menyetel mikrodetik ke 0, Anda harus memanggil setTime
Sebenarnya ada cara mudah, Anda bisa melewati nilai absolut mikrodetik
di konstruktor juga, itu akan seperti. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_6
Seperti yang Dan katakan itu mungkin kesalahan dalam kode, sungguh, dan itu sangat
yang populer,
untuk berpikir bahwa [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
7
Jika Anda mengambil sampelnya cukup banyak bahkan pada versi pra-7 PHP, Anda akan mendapatkannya
ketidaksetaraan juga. https. //3v4l. org/JV59e (maaf karena kelebihan muatan 3v4l a
sedikit di sini)
Ini terutama merupakan kesalahan yang tidak diinginkan karena menyebabkan kegagalan
secara acak,
tidak ada yang suka test suite mereka gagal / kadang-kadang /, itu membuat debugging
pengalaman yang sangat tidak menyenangkan
Saat melakukan manipulasi tanggal, katakanlah tugasnya adalah membuat laporan
Untuk
bulan sebelumnya, Anda harus selalu memiliki tanggal dasar sebagai titik
referensi
belum dibaca Hai Nikita, https. //3v4l. org/YUhFF adalah untuk menunjukkan bahwa TIDAK mudah DateTime baru ("5 menit yang lalu, 0 mikrodetik") memang menetapkan Lihat https. //3v4l. org/8VE7W untuk DateTime baru ('sekarang, 0 mikrodetik'); [PHP. 7. 1. 0-dev ] derick@whisky. ~ $php -n /tmp/tengah malam. php Parameter ke-3 untuk fungsi yang mana? Atau DateTimeWithMicroseconds kelas kedua? Tapi itu akan menjadi duplikat. DateTime dan Menambahkan argumen baru tambahan dengan nilai default, bukan pemutusan BC Bersulang, belum dibaca Hai, Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki Beberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1 DateTime baru ('sekarang tengah malam') jelas tidak akan berfungsi [PHP. 7. 1. 0-dev ] derick@whisky. ~ $cat /tmp/tengah malam. php [PHP. 7. 1. 0-dev ] derick@whisky. ~ $php -n /tmp/tengah malam. php Parameter ke-3 untuk fungsi yang mana? Dengan argumen ke-3 yang saya maksud adalah konstruktor Ketika mikrodetik TIDAK ditentukan dalam $time, jangan atur kecuali Atau DateTimeWithMicroseconds kelas kedua? Tapi itu akan menjadi duplikat. DateTime dan Menambahkan argumen baru tambahan dengan nilai default, bukan pemutusan BC Bersulang,
atur mikrodetik ke nol. BUKAN untuk mendemonstrasikan DateTime("5 menit
yang lalu") == DateTime baru ("5 menit yang lalu")
mikrodetik ke nol (senang mengetahuinya) tetapi ini tidak berfungsi untuk 'sekarang'
Dan kode ini gagal
objek(DateTimeImmutable)#1 (3) {
"tanggal"]=>
trit(26) "2016-11-08 12. 01. 20. 023680"
"timezone_type"]=>
nt(3)
"zona waktu"]=>
trit(3) "UTC"
}
objek(DateTimeImmutable)#2 (3) {
"tanggal"]=>
trit(26) "2016-11-08 00. 00. 00. 000000"
"timezone_type"]=>
nt(3)
"zona waktu"]=>
trit(3) "UTC"
}
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?
tapi sangat jelas apa yang akan terjadi
Kelas DateTimeImmutable sudah mendukung mikrodetik. Menambahkan tambahan
kelas untuk mereka, hanya akan membingungkan
Derick
beberapa isu
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
https. //3v4l. org/YUhFF Metode setMicroseconds akan berguna dan/atau mendukung
ke string relatif untuk menyetel mikrodetik ke 0 (seperti halnya tengah malam untuk
H. i. s). Atau apakah saya melewatkan sesuatu?
melalui setTime(). Mikrodetik hanyalah perpanjangan waktu
bagian
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 12. 01. 20. 023680"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(DateTimeImmutable)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 00. 00. 00. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?
DateTime publik. __construct([ string $time = "sekarang" [, DateTimeZone
$zona waktu = NULL, [ $initialize_microseconds = false ]]] )
$initialize_microseconds benar
tapi sangat jelas apa yang akan terjadi
Kelas DateTimeImmutable sudah mendukung mikrodetik. Menambahkan tambahan
kelas untuk mereka, hanya akan membingungkan
Derick
belum dibaca
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki
beberapa isu
Beberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
Kami memiliki masalah yang sama ketika resolusi waktu dari Firebird
meningkat dari milidetik menjadi mikrodetik. Banyak kode itu
mengharapkan tidak ada waktu sub kedua mulai melanggar karena ekstra
detail. Perbaikannya adalah 'CURRENT_TIME [(presisi)]' tetapi kompromi pada
default menghasilkan CURRENT_TIMESTAMP. = CURRENT_DATE + CURRENT_TIME
kecuali jika Anda benar-benar menyetel ketepatan keduanya agar cocok
Di PHP itu sebenarnya bukan masalah karena data yang dikembalikan memiliki
untuk diubah menjadi string dan ibase. timestampformat menyaring
bagian pecahan pula, dan bahkan detik dapat dipangkas jika
sesuai, jadi format string 'default' akan menyelesaikan masalah
membandingkan data waktu dari berbagai sumber?
--
Lester Caine - G8HFL
Kontak - http. // lsces. bersama. uk/wiki/?page=contact
L. S. Layanan Elektronik Caine - http. // lsces. bersama. inggris
EnquirySolve - http. //penyelesaian pertanyaan. com/
Lokakarya Model Insinyur Digital - http. //medw. bersama. inggris
Media Digital Pelangi - http. //rainbowdigitalmedia. bersama. inggris
belum dibaca
Hai,
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki
beberapa isu
Pemahaman saya adalah jika ini memengaruhi kode Anda, maka kode Anda
sudah memiliki asumsi buruk di dalamnya. Kode salah berasumsi
bahwa dua DateTime yang dihasilkan akan memiliki waktu yang sama
keduanya. *
Saya tidak sepenuhnya mengerti masalah apa yang ingin Anda selesaikan
diskusi ini. Tidak ada yang memaksa Anda untuk memperbarui ke PHP 7. 1
langsung;
asumsi buruk tentang waktu di DateTime yang dihasilkan sebelum Anda
tingkatkan ke PHP7. 1
tulis SjonHortensius
jika menghasilkan DateTime membutuhkan sekitar 4 μs (yang memang untuk saya), ini terjadi ~ 250. 000 kali
lebih sering
Memiliki bug lebih sering terjadi adalah hal yang baik. Itu menghentikan Anda dari
mengabaikan kasus tepi dan pemrograman secara kebetulan. **
Saya menyadari bahwa memiliki rilis membuatnya lebih jelas bahwa kode rusak
rusak adalah hal yang menjengkelkan harus diperbaiki. tapi kode itu
sudah salah. Menunda fitur yang berguna, hanya untuk menghindari keharusan memperbaiki
kode yang tidak stabil bukanlah cara yang baik untuk melanjutkan proyek, imo
tulis dshafik
Saya pikir mikrodetik default ke 0 ketika tidak spesifik untuk string relatif adalah perilaku yang benar
Saya tidak berpikir itu terdengar seperti rencana yang bagus sama sekali. Saat membuat a
DateTime hingga > Having bugs happen more frequently is a good thing. It stops
> you from ignoring edge cases and programming by coincidence.
_8 hanya
nilai tanggal diatur dari string input, sisa waktu diatur
sampai sekarang()
Bukankah memiliki mikrodetik berperilaku berbeda dengan yang lainnya
nilai waktu akan langsung menjadi bagian tambahan dari inkonsistensi
orang untuk menyesal?
Bersulang
Dan
- Kode contoh yang tidak berfungsi dengan benar sekarang. Jika periode tidur adalah
berkurang, menjadi kurang jelas bahwa kode tersebut rusak, tetapi memang demikian
masih rusak
untuk ($i=0; $iformat('U'))
"Hanya mengandalkan hal-hal yang dapat diandalkan. "
Arjen
Hai,
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki
beberapa isuPemahaman saya adalah jika ini memengaruhi kode Anda, maka kode Anda
sudah memiliki asumsi buruk di dalamnya. Kode salah berasumsi
bahwa dua DateTime yang dihasilkan akan memiliki waktu yang sama
keduanya. *Saya tidak sepenuhnya mengerti masalah apa yang ingin Anda selesaikan
diskusi ini. Tidak ada yang memaksa Anda untuk memperbarui ke PHP 7. 1
langsung;
asumsi buruk tentang waktu di DateTime yang dihasilkan sebelum Anda
tingkatkan ke PHP7. 1tulis SjonHortensius
jika menghasilkan DateTime membutuhkan sekitar 4 μs (yang memang untuk saya), ini terjadi ~ 250. 000 kali
lebih seringMemiliki bug lebih sering terjadi adalah hal yang baik. Itu menghentikan Anda dari
mengabaikan kasus tepi dan pemrograman secara kebetulan. **Saya menyadari bahwa memiliki rilis membuatnya lebih jelas bahwa kode rusak
rusak adalah hal yang menjengkelkan harus diperbaiki. tapi kode itu
sudah salah. Menunda fitur yang berguna, hanya untuk menghindari keharusan memperbaiki
kode yang tidak stabil bukanlah cara yang baik untuk melanjutkan proyek, imotulis dshafik
Saya pikir mikrodetik default ke 0 ketika tidak spesifik untuk string relatif adalah perilaku yang benar
Saya tidak berpikir itu terdengar seperti rencana yang bagus sama sekali. Saat membuat a
DateTime hingga > Having bugs happen more frequently is a good thing. It stops > you from ignoring edge cases and programming by coincidence. _8 hanya
nilai tanggal diatur dari string input, sisa waktu diatur
sampai sekarang()Bukankah memiliki mikrodetik berperilaku berbeda dengan yang lainnya
nilai waktu akan langsung menjadi bagian tambahan dari inkonsistensi
orang untuk menyesal?Bersulang
Dan
- Kode contoh yang tidak berfungsi dengan benar sekarang. Jika periode tidur adalah
berkurang, menjadi kurang jelas bahwa kode tersebut rusak, tetapi memang demikian
masih rusakuntuk ($i=0; $iformat('U'))
Karena Anda membebani kelas DateTime, itu hanya minor
ketidaknyamanan
Bersulang,
Derick
belum dibaca Hai, Saya pikir Anda membuat beberapa asumsi buruk di sini Tolong jangan top-reply pada daftar ini Contoh yang diberikan oleh Sjon adalah Mereka sudah bisa istirahat. Sebagai Dan menulis lebih baik Memiliki bug lebih sering terjadi adalah hal yang baik. Itu berhenti Kami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir Menganggap serius bukan berarti harus setuju Menganggap serius berarti membaca pesan lengkap dan tidak Tidak ada komentar tentang tidak dapat menyetel microtime ke nol PHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $ kucing doo. php [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $php -n doo. php Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL, $mikrodetik = NULL) di /tmp/doo. php pada baris 9 Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
1 di PHP 7. 0 [PHP. 5. 6. 28-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov Saya pikir itu TIDAK melanggar (dan karenanya peringatan) LSP. Jika Anda LAKUKAN menggunakan "[. ] jika S adalah subtipe dari T, maka objek bertipe T dapat diganti A. $tanggal = TanggalWaktu baru; Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak Ini dulu bekerja selama 7 tahun, dan sekarang tidak. Jika saya tidak disimpan Di mana ini memiliki asumsi yang buruk? Asumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik Pertama, hampir tidak mungkin membuat objek DateTime dengan Ini sudah terjadi sejak 5. 3. 1. Anda tidak dapat memperdebatkan DateTime dengan serius DateTime memiliki cara yang tidak jelas untuk menginisialisasi dengan waktu saat ini Apakah Anda pernah meng-Google "situs mikrodetik. php. bersih/manual";? Membuat asumsi DateTime mendukung microtime hanya akan didasarkan pada Lihat https. //3v4l. org/aCRU0 dan https. //3v4l. org/4Oid8 [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $cat doo2. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $php -n doo2. php Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a Karena Anda membebani kelas DateTime, itu hanya minor Bersulang,
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancur
Anda dari mengabaikan kasus tepi dan pemrograman secara kebetulan
umpan balik harus ditanggapi dengan serius
berfokus pada detail contoh (https. //3v4l. org/YUhFF menghadapi
masalah yang sama tanpa argumen konstruktor; . g. tidak mudah diatur
mikrodetik ke 0). Saya tidak pernah mengatakan kami menghadapi DateTime baru == baru
Masalah DateTime, tapi Dan memberikan pelajaran tentang asumsi yang buruk
parameter (poin 3). SM istirahat
eksekusi sudah benar
objek(TanggalKu)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 30. 06. 371428"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(TanggalKu)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 02. 10. 10. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
Standar Ketat. Deklarasi MyDate. setTime() harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
Argumen mikrodetik ke-4 dalam aplikasi Anda, Anda tidak dapat mengganti a
objek DateTime dengan CustomDate yang tidak memiliki argumen ke-4 ini,
bahkan DateTime yang tangguh memiliki nilai default untuk itu. Jika Anda ingin menyimpan a
waktu dengan mikrodetik dengan setTime, Anda berakhir tanpa mikrodetik jika
Anda mengganti DateTime dengan CustomDate
dengan objek bertipe S (i. e. , objek bertipe T dapat diganti
dengan objek subtipenya dari tipe S) tanpa mengubah salah satu dari
properti yang diinginkan dari program itu (kebenaran, tugas yang dilakukan, dll. )"
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
detik, itu tidak akan berhasil selama 7 tahun
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kode
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
waktu saat ini DENGAN set mikrodetik (DateTime. createFromFormat('U. kamu',
sprintf('%. f', waktu mikro(benar)));
rumit untuk membuat objek DateTime tanpa mikrodetik
diinisialisasi/diset ke 0. Tanggal Waktu. buatDariFormat('U', [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
4);
Tanggal Waktu('@'. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_4);
selalu memiliki presisi mikrodetik dan memperbaiki inisialisasi
hampir 7 tahun
termasuk mikrodetik, __construct() default tidak menunjukkan tanda
dukungan mikrodetik. Mengubah perilaku ini 7 tahun setelah perkenalan
tidak bisa disebut perbaikan bug (apakah ini masuk ke 5. 6 dan 7. 0 juga?),
itu hanya fitur
Hanya dokumentasi (tidak termasuk komentar) tentang createFromFormat
menyebutkan 'mikrodetik'
detail internal yang tidak terdokumentasi. ITU akan menjadi asumsi yang buruk
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 39. 04. 123456"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))
ketidaknyamanan
Derick
belum dibaca
Hai Dan,
Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
Mereka sudah rusak. Itulah intinya
Jarang pemicu kerusakan saat ini tetapi akan memicu
Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
belum dibaca Hai Dan, Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh Mereka sudah rusak. Itulah intinya Jarang pemicu kerusakan saat ini tetapi akan memicu Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat Saya telah mendiskusikan hal ini dengan Joe, dan kami setuju dengan peringatan BC break; Kami pasti harus mendokumentasikan beberapa praktik terbaik seputar tanggal relatif, Terima kasih,
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
yang lainnya tidak dianggap sebagai jeda BC
e. g. menggunakan tengah malam, atau mengatur waktu secara eksplisit
belum dibaca
Hei Arjen,
Tidak ada cara mudah untuk menyetel mikrodetik ke 0, Anda harus memanggil setTime
Sebenarnya ada cara mudah, Anda bisa melewati nilai absolut mikrodetik
di konstruktor juga, itu akan seperti. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_6
Seperti yang Dan katakan itu mungkin kesalahan dalam kode, sungguh, dan itu sangat
yang populer,
untuk berpikir bahwa [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
7
Jika Anda mengambil sampelnya cukup banyak bahkan pada versi pra-7 PHP, Anda akan mendapatkannya
ketidaksetaraan juga. https. //3v4l. org/JV59e (maaf karena kelebihan muatan 3v4l a
sedikit di sini)
Ini terutama merupakan kesalahan yang tidak diinginkan karena menyebabkan kegagalan
secara acak,
tidak ada yang suka test suite mereka gagal / kadang-kadang /, itu membuat debugging
pengalaman yang sangat tidak menyenangkan
Saat melakukan manipulasi tanggal, katakanlah tugasnya adalah membuat laporan
Untuk
bulan sebelumnya, Anda harus selalu memiliki tanggal dasar sebagai titik
referensi
belum dibaca Hai Nikita, https. //3v4l. org/YUhFF adalah untuk menunjukkan bahwa TIDAK mudah DateTime baru ("5 menit yang lalu, 0 mikrodetik") memang menetapkan Lihat https. //3v4l. org/8VE7W untuk DateTime baru ('sekarang, 0 mikrodetik'); "Hanya mengandalkan hal-hal yang dapat diandalkan. " Arjen Hai, Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki Pemahaman saya adalah jika ini memengaruhi kode Anda, maka kode Anda
atur mikrodetik ke nol. BUKAN untuk mendemonstrasikan DateTime("5 menit
yang lalu") == DateTime baru ("5 menit yang lalu")
mikrodetik ke nol (senang mengetahuinya) tetapi ini tidak berfungsi untuk 'sekarang'
Dan kode ini gagal format('U'))
beberapa isu
sudah memiliki asumsi buruk di dalamnya. Kode salah berasumsi
bahwa dua DateTime yang dihasilkan akan memiliki waktu yang sama
keduanya. *
Saya tidak sepenuhnya mengerti masalah apa yang ingin Anda selesaikan
diskusi ini. Tidak ada yang memaksa Anda untuk memperbarui ke PHP 7. 1
langsung;
asumsi buruk tentang waktu di DateTime yang dihasilkan sebelum Anda
tingkatkan ke PHP7. 1
tulis SjonHortensius
jika menghasilkan DateTime membutuhkan sekitar 4 μs (yang memang untuk saya), ini terjadi ~ 250. 000 kali
lebih sering
Memiliki bug lebih sering terjadi adalah hal yang baik. Itu menghentikan Anda dari
mengabaikan kasus tepi dan pemrograman secara kebetulan. **
Saya menyadari bahwa memiliki rilis membuatnya lebih jelas bahwa kode rusak
rusak adalah hal yang menjengkelkan harus diperbaiki. tapi kode itu
sudah salah. Menunda fitur yang berguna, hanya untuk menghindari keharusan memperbaiki
kode yang tidak stabil bukanlah cara yang baik untuk melanjutkan proyek, imo
tulis dshafik
Saya pikir mikrodetik default ke 0 ketika tidak spesifik untuk string relatif adalah perilaku yang benar
Saya tidak berpikir itu terdengar seperti rencana yang bagus sama sekali. Saat membuat a
DateTime hingga > Having bugs happen more frequently is a good thing. It stops
> you from ignoring edge cases and programming by coincidence.
_8 hanya
nilai tanggal diatur dari string input, sisa waktu diatur
sampai sekarang()
Bukankah memiliki mikrodetik berperilaku berbeda dengan yang lainnya
nilai waktu akan langsung menjadi bagian tambahan dari inkonsistensi
orang untuk menyesal?
Bersulang
Dan
- Kode contoh yang tidak berfungsi dengan benar sekarang. Jika periode tidur adalah
berkurang, menjadi kurang jelas bahwa kode tersebut rusak, tetapi memang demikian
masih rusak
untuk ($i=0; $iformat('U'))
Karena Anda membebani kelas DateTime, itu hanya minor
ketidaknyamanan
Bersulang,
Derick
belum dibaca Hai, Saya pikir Anda membuat beberapa asumsi buruk di sini Tolong jangan top-reply pada daftar ini Contoh yang diberikan oleh Sjon adalah Mereka sudah bisa istirahat. Sebagai Dan menulis lebih baik Memiliki bug lebih sering terjadi adalah hal yang baik. Itu berhenti Kami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir Menganggap serius bukan berarti harus setuju Menganggap serius berarti membaca pesan lengkap dan tidak Tidak ada komentar tentang tidak dapat menyetel microtime ke nol PHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $ kucing doo. php [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $php -n doo. php Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL, $mikrodetik = NULL) di /tmp/doo. php pada baris 9 Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
1 di PHP 7. 0 [PHP. 5. 6. 28-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov Saya pikir itu TIDAK melanggar (dan karenanya peringatan) LSP. Jika Anda LAKUKAN menggunakan "[. ] jika S adalah subtipe dari T, maka objek bertipe T dapat diganti A. $tanggal = TanggalWaktu baru; Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak Ini dulu bekerja selama 7 tahun, dan sekarang tidak. Jika saya tidak disimpan Di mana ini memiliki asumsi yang buruk? Asumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik Pertama, hampir tidak mungkin membuat objek DateTime dengan Ini sudah terjadi sejak 5. 3. 1. Anda tidak dapat memperdebatkan DateTime dengan serius DateTime memiliki cara yang tidak jelas untuk menginisialisasi dengan waktu saat ini Apakah Anda pernah meng-Google "situs mikrodetik. php. bersih/manual";? Membuat asumsi DateTime mendukung microtime hanya akan didasarkan pada Lihat https. //3v4l. org/aCRU0 dan https. //3v4l. org/4Oid8 [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $cat doo2. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $php -n doo2. php Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a Karena Anda membebani kelas DateTime, itu hanya minor Bersulang,
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancur
Anda dari mengabaikan kasus tepi dan pemrograman secara kebetulan
umpan balik harus ditanggapi dengan serius
berfokus pada detail contoh (https. //3v4l. org/YUhFF menghadapi
masalah yang sama tanpa argumen konstruktor; . g. tidak mudah diatur
mikrodetik ke 0). Saya tidak pernah mengatakan kami menghadapi DateTime baru == baru
Masalah DateTime, tapi Dan memberikan pelajaran tentang asumsi yang buruk
parameter (poin 3). SM istirahat
eksekusi sudah benar
objek(TanggalKu)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 30. 06. 371428"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(TanggalKu)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 02. 10. 10. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
Standar Ketat. Deklarasi MyDate. setTime() harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
Argumen mikrodetik ke-4 dalam aplikasi Anda, Anda tidak dapat mengganti a
objek DateTime dengan CustomDate yang tidak memiliki argumen ke-4 ini,
bahkan DateTime yang tangguh memiliki nilai default untuk itu. Jika Anda ingin menyimpan a
waktu dengan mikrodetik dengan setTime, Anda berakhir tanpa mikrodetik jika
Anda mengganti DateTime dengan CustomDate
dengan objek bertipe S (i. e. , objek bertipe T dapat diganti
dengan objek subtipenya dari tipe S) tanpa mengubah salah satu dari
properti yang diinginkan dari program itu (kebenaran, tugas yang dilakukan, dll. )"
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
detik, itu tidak akan berhasil selama 7 tahun
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kode
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
waktu saat ini DENGAN set mikrodetik (DateTime. createFromFormat('U. kamu',
sprintf('%. f', waktu mikro(benar)));
rumit untuk membuat objek DateTime tanpa mikrodetik
diinisialisasi/diset ke 0. Tanggal Waktu. buatDariFormat('U', [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
4);
Tanggal Waktu('@'. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_4);
selalu memiliki presisi mikrodetik dan memperbaiki inisialisasi
hampir 7 tahun
termasuk mikrodetik, __construct() default tidak menunjukkan tanda
dukungan mikrodetik. Mengubah perilaku ini 7 tahun setelah perkenalan
tidak bisa disebut perbaikan bug (apakah ini masuk ke 5. 6 dan 7. 0 juga?),
itu hanya fitur
Hanya dokumentasi (tidak termasuk komentar) tentang createFromFormat
menyebutkan 'mikrodetik'
detail internal yang tidak terdokumentasi. ITU akan menjadi asumsi yang buruk
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 39. 04. 123456"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))
ketidaknyamanan
Derick
belum dibaca
Hai Dan,
Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
Mereka sudah rusak. Itulah intinya
Jarang pemicu kerusakan saat ini tetapi akan memicu
Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
belum dibaca Hai Dan, Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh Mereka sudah rusak. Itulah intinya Jarang pemicu kerusakan saat ini tetapi akan memicu Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat Saya telah mendiskusikan hal ini dengan Joe, dan kami setuju dengan peringatan BC break; Kami pasti harus mendokumentasikan beberapa praktik terbaik seputar tanggal relatif, Terima kasih,
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
yang lainnya tidak dianggap sebagai jeda BC
e. g. menggunakan tengah malam, atau mengatur waktu secara eksplisit
belum dibaca
Hai,
Saya pikir Anda membuat beberapa asumsi buruk di sini
Tolong jangan top-reply pada daftar ini
Contoh yang diberikan oleh Sjon adalah
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancur
Mereka sudah bisa istirahat. Sebagai Dan menulis lebih baik
> Having bugs happen more frequently is a good thing. It stops > you from ignoring edge cases and programming by coincidence. _Kami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir
umpan balik harus ditanggapi dengan serius
Menganggap serius bukan berarti harus setuju
- Kami membebani DateTime. setTime, ini membutuhkan pembaruan karena tambahan
parameter (poin 3). SM istirahat
PHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan
eksekusi sudah benar
Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak
Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php <?php class MyDate extends DateTimeImmutable { function setTime( $h, $i, $s ) { return parent::setTime( $h, $i + 5, $s ); } } $a = new MyDate(); $b = $a->setTime( 2, 5, 10 ); var_dump( $a, $b ); ?> [PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9 object(MyDate)#1 (3) { ["date"]=> string(26) "2016-11-08 13:30:06.371428" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(MyDate)#2 (3) { ["date"]=> string(26) "2016-11-08 02:10:10.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } _0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php <?php class MyDate extends DateTimeImmutable { function setTime( $h, $i, $s ) { return parent::setTime( $h, $i + 5, $s ); } } $a = new MyDate(); $b = $a->setTime( 2, 5, 10 ); var_dump( $a, $b ); ?> [PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9 object(MyDate)#1 (3) { ["date"]=> string(26) "2016-11-08 13:30:06.371428" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(MyDate)#2 (3) { ["date"]=> string(26) "2016-11-08 02:10:10.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } 1 di PHP 7. 0
[PHP: 5.6.28-dev ] derick@whisky:~/dev/php/php-src.git $ php -n -derror_reporting=-1 -ddate.timezone=UTC /tmp/doo.php Strict Standards: Declaration of MyDate::setTime() should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL) in /tmp/doo.php on line 9 … [PHP: 7.0.13-dev ] derick@whisky:~/dev/php/php-src.git $ php -n -derror_reporting=-1 -ddate.timezone=UTC /tmp/doo.php Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL) in /tmp/doo.php on line 9 … _Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
- Kami menguji yang berikut ini
A. $tanggal = TanggalWaktu baru;
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)
Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
Di mana ini memiliki asumsi yang buruk?
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kode
Asumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))
Karena Anda membebani kelas DateTime, itu hanya minor
ketidaknyamanan
Bersulang,
Derick
belum dibaca Hai, Saya pikir Anda membuat beberapa asumsi buruk di sini Tolong jangan top-reply pada daftar ini Contoh yang diberikan oleh Sjon adalah Mereka sudah bisa istirahat. Sebagai Dan menulis lebih baik Memiliki bug lebih sering terjadi adalah hal yang baik. Itu berhenti Kami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir Menganggap serius bukan berarti harus setuju Menganggap serius berarti membaca pesan lengkap dan tidak Tidak ada komentar tentang tidak dapat menyetel microtime ke nol PHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $ kucing doo. php [PHP. 7. 1. 0-dev ] derick@whisky. /tmp $php -n doo. php Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL, $mikrodetik = NULL) di /tmp/doo. php pada baris 9 Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
1 di PHP 7. 0 [PHP. 5. 6. 28-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov Saya pikir itu TIDAK melanggar (dan karenanya peringatan) LSP. Jika Anda LAKUKAN menggunakan "[. ] jika S adalah subtipe dari T, maka objek bertipe T dapat diganti A. $tanggal = TanggalWaktu baru; Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak Ini dulu bekerja selama 7 tahun, dan sekarang tidak. Jika saya tidak disimpan Di mana ini memiliki asumsi yang buruk? Asumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik Pertama, hampir tidak mungkin membuat objek DateTime dengan Ini sudah terjadi sejak 5. 3. 1. Anda tidak dapat memperdebatkan DateTime dengan serius DateTime memiliki cara yang tidak jelas untuk menginisialisasi dengan waktu saat ini Apakah Anda pernah meng-Google "situs mikrodetik. php. bersih/manual";? Membuat asumsi DateTime mendukung microtime hanya akan didasarkan pada Lihat https. //3v4l. org/aCRU0 dan https. //3v4l. org/4Oid8 [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $cat doo2. php [PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $php -n doo2. php Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a Karena Anda membebani kelas DateTime, itu hanya minor Bersulang,
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancur
Anda dari mengabaikan kasus tepi dan pemrograman secara kebetulan
umpan balik harus ditanggapi dengan serius
berfokus pada detail contoh (https. //3v4l. org/YUhFF menghadapi
masalah yang sama tanpa argumen konstruktor; . g. tidak mudah diatur
mikrodetik ke 0). Saya tidak pernah mengatakan kami menghadapi DateTime baru == baru
Masalah DateTime, tapi Dan memberikan pelajaran tentang asumsi yang buruk
parameter (poin 3). SM istirahat
eksekusi sudah benar
objek(TanggalKu)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 30. 06. 371428"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(TanggalKu)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 02. 10. 10. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
Standar Ketat. Deklarasi MyDate. setTime() harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
Argumen mikrodetik ke-4 dalam aplikasi Anda, Anda tidak dapat mengganti a
objek DateTime dengan CustomDate yang tidak memiliki argumen ke-4 ini,
bahkan DateTime yang tangguh memiliki nilai default untuk itu. Jika Anda ingin menyimpan a
waktu dengan mikrodetik dengan setTime, Anda berakhir tanpa mikrodetik jika
Anda mengganti DateTime dengan CustomDate
dengan objek bertipe S (i. e. , objek bertipe T dapat diganti
dengan objek subtipenya dari tipe S) tanpa mengubah salah satu dari
properti yang diinginkan dari program itu (kebenaran, tugas yang dilakukan, dll. )"
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
detik, itu tidak akan berhasil selama 7 tahun
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kode
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
waktu saat ini DENGAN set mikrodetik (DateTime. createFromFormat('U. kamu',
sprintf('%. f', waktu mikro(benar)));
rumit untuk membuat objek DateTime tanpa mikrodetik
diinisialisasi/diset ke 0. Tanggal Waktu. buatDariFormat('U', [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
4);
Tanggal Waktu('@'. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_4);
selalu memiliki presisi mikrodetik dan memperbaiki inisialisasi
hampir 7 tahun
termasuk mikrodetik, __construct() default tidak menunjukkan tanda
dukungan mikrodetik. Mengubah perilaku ini 7 tahun setelah perkenalan
tidak bisa disebut perbaikan bug (apakah ini masuk ke 5. 6 dan 7. 0 juga?),
itu hanya fitur
Hanya dokumentasi (tidak termasuk komentar) tentang createFromFormat
menyebutkan 'mikrodetik'
detail internal yang tidak terdokumentasi. ITU akan menjadi asumsi yang buruk
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 39. 04. 123456"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))
ketidaknyamanan
Derick
belum dibaca
Hai,
Saya pikir Anda membuat beberapa asumsi buruk di sini
Tolong jangan top-reply pada daftar ini
Contoh yang diberikan oleh Sjon adalah
skrip dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk, tetapi kehidupan nyata
contoh penggunaan DateTime. Dan mereka akan hancurMereka sudah bisa istirahat. Sebagai Dan menulis lebih baik
Memiliki bug lebih sering terjadi adalah hal yang baik. Itu berhenti
Anda dari mengabaikan kasus tepi dan pemrograman secara kebetulanKami memiliki dua masalah dalam basis kode kami. Kami sedang menguji rilis RC, saya pikir
umpan balik harus ditanggapi dengan seriusMenganggap serius bukan berarti harus setuju
Menganggap serius berarti membaca pesan lengkap dan tidak
berfokus pada detail contoh (https. //3v4l. org/YUhFF menghadapi
masalah yang sama tanpa argumen konstruktor; . g. tidak mudah diatur
mikrodetik ke 0). Saya tidak pernah mengatakan kami menghadapi DateTime baru == baru
Masalah DateTime, tapi Dan memberikan pelajaran tentang asumsi yang buruk
Tidak ada komentar tentang tidak dapat menyetel microtime ke nol
- Kami membebani DateTime. setTime, ini membutuhkan pembaruan karena tambahan
parameter (poin 3). SM istirahatPHP memberikan peringatan di sini, tetapi hasil kode yang diharapkan
eksekusi sudah benar[PHP. 7. 1. 0-dev ] derick@whisky. /tmp $ kucing doo. php
[PHP. 7. 1. 0-dev ] derick@whisky. /tmp $php -n doo. php
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL, $mikrodetik = NULL) di /tmp/doo. php pada baris 9
objek(TanggalKu)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 30. 06. 371428"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(TanggalKu)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 02. 10. 10. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}Ini paling banyak merupakan jeda BC karena ini menunjukkan peringatan. Kode itu sendiri tidak rusak
Di PHP5. 6, ini adalah peringatan [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php <?php class MyDate extends DateTimeImmutable { function setTime( $h, $i, $s ) { return parent::setTime( $h, $i + 5, $s ); } } $a = new MyDate(); $b = $a->setTime( 2, 5, 10 ); var_dump( $a, $b ); ?> [PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9 object(MyDate)#1 (3) { ["date"]=> string(26) "2016-11-08 13:30:06.371428" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(MyDate)#2 (3) { ["date"]=> string(26) "2016-11-08 02:10:10.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } _0, yang diubah menjadi [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php <?php class MyDate extends DateTimeImmutable { function setTime( $h, $i, $s ) { return parent::setTime( $h, $i + 5, $s ); } } $a = new MyDate(); $b = $a->setTime( 2, 5, 10 ); var_dump( $a, $b ); ?> [PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9 object(MyDate)#1 (3) { ["date"]=> string(26) "2016-11-08 13:30:06.371428" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(MyDate)#2 (3) { ["date"]=> string(26) "2016-11-08 02:10:10.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } 1 di PHP 7. 0
[PHP. 5. 6. 28-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php
Standar Ketat. Deklarasi MyDate. setTime() harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…[PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $ php -n -derror_reporting=-1 -ddate. zona waktu=UTC /tmp/doo. php
Peringatan. Deklarasi MyDate. setTime($h, $i, $s) harus kompatibel dengan DateTimeImmutable. setTime($jam, $menit, $detik = NULL) di /tmp/doo. php pada baris 9
…Karena kelebihan muatan khusus ini tidak melanggar Pergantian Liskov
Prinsipnya, saya berpendapat bahwa peringatan inilah yang merupakan pemutusan BC di PHP
7. 0, dan bukan penambahan nilai argumen-dengan-default-ekstra
Saya pikir itu TIDAK melanggar (dan karenanya peringatan) LSP. Jika Anda LAKUKAN menggunakan
Argumen mikrodetik ke-4 dalam aplikasi Anda, Anda tidak dapat mengganti a
objek DateTime dengan CustomDate yang tidak memiliki argumen ke-4 ini,
bahkan DateTime yang tangguh memiliki nilai default untuk itu. Jika Anda ingin menyimpan a
waktu dengan mikrodetik dengan setTime, Anda berakhir tanpa mikrodetik jika
Anda mengganti DateTime dengan CustomDate
"[. ] jika S adalah subtipe dari T, maka objek bertipe T dapat diganti
dengan objek bertipe S (i. e. , objek bertipe T dapat diganti
dengan objek subtipenya dari tipe S) tanpa mengubah salah satu dari
properti yang diinginkan dari program itu (kebenaran, tugas yang dilakukan, dll. )"
- Kami menguji yang berikut ini
A. $tanggal = TanggalWaktu baru;
B. Simpan di basis data
C. Ambil datetime
D. $fromDatabase = new DateTime(storedDateTime);
E. $fromDatabase == $date (yang gagal sekarang, karena $date memiliki microsecond
presisi sementara $fromDatabase tidak)Jika Anda tidak menyimpan mikrodetik dalam database, saya kira tidak
bekerja. Ini seperti jika Anda tidak menyimpan detik di database, itu
Anda juga tidak akan mendapatkan hasil yang sama
Ini dulu bekerja selama 7 tahun, dan sekarang tidak. Jika saya tidak disimpan
detik, itu tidak akan berhasil selama 7 tahun
Di mana ini memiliki asumsi yang buruk?
detik presisi), dan sekarang gagal. Apakah itu asumsi yang buruk?
hanya mundur tanpa cara yang baik untuk memperbaiki kodeAsumsi buruknya adalah, bahwa DateTime selalu memiliki mikrodetik
presisi, dan bug yang diperbaiki adalah, yang tidak selalu mereka dapatkan
diinisialisasi dengan benar
Pertama, hampir tidak mungkin membuat objek DateTime dengan
waktu saat ini DENGAN set mikrodetik (DateTime. createFromFormat('U. kamu',
sprintf('%. f', waktu mikro(benar)));
rumit untuk membuat objek DateTime tanpa mikrodetik
diinisialisasi/diset ke 0. Tanggal Waktu. buatDariFormat('U', [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
4);
Tanggal Waktu('@'. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_4);
Ini sudah terjadi sejak 5. 3. 1. Anda tidak dapat memperdebatkan DateTime dengan serius
selalu memiliki presisi mikrodetik dan memperbaiki inisialisasi
hampir 7 tahun
DateTime memiliki cara yang tidak jelas untuk menginisialisasi dengan waktu saat ini
termasuk mikrodetik, __construct() default tidak menunjukkan tanda
dukungan mikrodetik. Mengubah perilaku ini 7 tahun setelah perkenalan
tidak bisa disebut perbaikan bug (apakah ini masuk ke 5. 6 dan 7. 0 juga?),
itu hanya fitur
Apakah Anda pernah meng-Google "situs mikrodetik. php. bersih/manual";?
Hanya dokumentasi (tidak termasuk komentar) tentang createFromFormat
menyebutkan 'mikrodetik'
Membuat asumsi DateTime mendukung microtime hanya akan didasarkan pada
detail internal yang tidak terdokumentasi. ITU akan menjadi asumsi yang buruk
Lihat https. //3v4l. org/aCRU0 dan https. //3v4l. org/4Oid8
oleh Alice Wonder — lihat sumber[PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $cat doo2. php
[PHP. 7. 0. 13-dev ] derick@whisky. ~/dev/php/php-src. git $php -n doo2. php
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 13. 39. 04. 123456"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}Kita dapat menyetel mikrodetik ke 0, yang tidak praktis karena a
metode setMicroseconds hilang. Seseorang perlu memanggil setTime dengan
diambil jam, menit, detik atau setTimestamp($dt->format('U'))Karena Anda membebani kelas DateTime, itu hanya minor
ketidaknyamananBersulang,
Derick
belum dibaca
Hai Dan,
Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
Mereka sudah rusak. Itulah intinya
Jarang pemicu kerusakan saat ini tetapi akan memicu
Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
belum dibaca Hai Dan, Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh Mereka sudah rusak. Itulah intinya Jarang pemicu kerusakan saat ini tetapi akan memicu Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat Saya telah mendiskusikan hal ini dengan Joe, dan kami setuju dengan peringatan BC break; Kami pasti harus mendokumentasikan beberapa praktik terbaik seputar tanggal relatif, Terima kasih,
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancur
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
yang lainnya tidak dianggap sebagai jeda BC
e. g. menggunakan tengah malam, atau mengatur waktu secara eksplisit
belum dibaca
Hai Dan,
Saya pikir Anda membuat beberapa asumsi buruk di sini. Contoh yang diberikan oleh
Sjon adalah skrip yang dikirimkan ke 3v4l. org Mereka mungkin memiliki asumsi yang buruk,
tetapi merupakan contoh kehidupan nyata dari penggunaan DateTime. Dan mereka akan hancurMereka sudah rusak. Itulah intinya
Jarang pemicu kerusakan saat ini tetapi akan memicu
Secara pribadi saya lebih suka ketika kode buruk jelas memicu, itu bisa sangat
sulit (baca mahal) untuk melacak bug dalam kode yang jarang dan
pemicu secara acak
Saya telah mendiskusikan hal ini dengan Joe, dan kami setuju dengan peringatan BC break;
yang lainnya tidak dianggap sebagai jeda BC
Kami pasti harus mendokumentasikan beberapa praktik terbaik seputar tanggal relatif,
e. g. menggunakan tengah malam, atau mengatur waktu secara eksplisit
Terima kasih,
- Davey
belum dibaca
Hei Arjen,
Tidak ada cara mudah untuk menyetel mikrodetik ke 0, Anda harus memanggil setTime
Sebenarnya ada cara mudah, Anda bisa melewati nilai absolut mikrodetik
di konstruktor juga, itu akan seperti. [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
_6
Seperti yang Dan katakan itu mungkin kesalahan dalam kode, sungguh, dan itu sangat
yang populer,
untuk berpikir bahwa [PHP: 7.1.0-dev ] derick@whisky:/tmp $ cat doo.php
<?php
class MyDate extends DateTimeImmutable
{
function setTime( $h, $i, $s )
{
return parent::setTime( $h, $i + 5, $s );
}
}
$a = new MyDate();
$b = $a->setTime( 2, 5, 10 );
var_dump( $a, $b );
?>
[PHP: 7.1.0-dev ] derick@whisky:/tmp $ php -n doo.php
Warning: Declaration of MyDate::setTime($h, $i, $s) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) in /tmp/doo.php on line 9
object(MyDate)#1 (3) {
["date"]=>
string(26) "2016-11-08 13:30:06.371428"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(MyDate)#2 (3) {
["date"]=>
string(26) "2016-11-08 02:10:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
7
Jika Anda mengambil sampelnya cukup banyak bahkan pada versi pra-7 PHP, Anda akan mendapatkannya
ketidaksetaraan juga. https. //3v4l. org/JV59e (maaf karena kelebihan muatan 3v4l a
sedikit di sini)
Ini terutama merupakan kesalahan yang tidak diinginkan karena menyebabkan kegagalan
secara acak,
tidak ada yang suka test suite mereka gagal / kadang-kadang /, itu membuat debugging
pengalaman yang sangat tidak menyenangkan
Saat melakukan manipulasi tanggal, katakanlah tugasnya adalah membuat laporan
Untuk
bulan sebelumnya, Anda harus selalu memiliki tanggal dasar sebagai titik
referensi
belum dibaca Hai Nikita, https. //3v4l. org/YUhFF adalah untuk menunjukkan bahwa TIDAK mudah DateTime baru ("5 menit yang lalu, 0 mikrodetik") memang menetapkan Lihat https. //3v4l. org/8VE7W untuk DateTime baru ('sekarang, 0 mikrodetik'); [PHP. 7. 1. 0-dev ] derick@whisky. ~ $php -n /tmp/tengah malam. php Parameter ke-3 untuk fungsi yang mana? Atau DateTimeWithMicroseconds kelas kedua? Tapi itu akan menjadi duplikat. DateTime dan Menambahkan argumen baru tambahan dengan nilai default, bukan pemutusan BC Bersulang, belum dibaca Hai, Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki Beberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1 DateTime baru ('sekarang tengah malam') jelas tidak akan berfungsi [PHP. 7. 1. 0-dev ] derick@whisky. ~ $cat /tmp/tengah malam. php [PHP. 7. 1. 0-dev ] derick@whisky. ~ $php -n /tmp/tengah malam. php Parameter ke-3 untuk fungsi yang mana? Dengan argumen ke-3 yang saya maksud adalah konstruktor Ketika mikrodetik TIDAK ditentukan dalam $time, jangan atur kecuali Atau DateTimeWithMicroseconds kelas kedua? Tapi itu akan menjadi duplikat. DateTime dan Menambahkan argumen baru tambahan dengan nilai default, bukan pemutusan BC Bersulang, belum dibaca Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki beberapa isu Kami memiliki masalah yang sama ketika resolusi waktu dari Firebird Di PHP itu sebenarnya bukan masalah karena data yang dikembalikan memiliki Kontak - http. // lsces. bersama. uk/wiki/?page=contact
atur mikrodetik ke nol. BUKAN untuk mendemonstrasikan DateTime("5 menit
yang lalu") == DateTime baru ("5 menit yang lalu")
mikrodetik ke nol (senang mengetahuinya) tetapi ini tidak berfungsi untuk 'sekarang'
Dan kode ini gagal
objek(DateTimeImmutable)#1 (3) {
"tanggal"]=>
trit(26) "2016-11-08 12. 01. 20. 023680"
"timezone_type"]=>
nt(3)
"zona waktu"]=>
trit(3) "UTC"
}
objek(DateTimeImmutable)#2 (3) {
"tanggal"]=>
trit(26) "2016-11-08 00. 00. 00. 000000"
"timezone_type"]=>
nt(3)
"zona waktu"]=>
trit(3) "UTC"
}
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?
tapi sangat jelas apa yang akan terjadi
Kelas DateTimeImmutable sudah mendukung mikrodetik. Menambahkan tambahan
kelas untuk mereka, hanya akan membingungkan
Derick
beberapa isu
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
https. //3v4l. org/YUhFF Metode setMicroseconds akan berguna dan/atau mendukung
ke string relatif untuk menyetel mikrodetik ke 0 (seperti halnya tengah malam untuk
H. i. s). Atau apakah saya melewatkan sesuatu?
melalui setTime(). Mikrodetik hanyalah perpanjangan waktu
bagian
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 12. 01. 20. 023680"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(DateTimeImmutable)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 00. 00. 00. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?
DateTime publik. __construct([ string $time = "sekarang" [, DateTimeZone
$zona waktu = NULL, [ $initialize_microseconds = false ]]] )
$initialize_microseconds benar
tapi sangat jelas apa yang akan terjadi
Kelas DateTimeImmutable sudah mendukung mikrodetik. Menambahkan tambahan
kelas untuk mereka, hanya akan membingungkan
Derick
Beberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
meningkat dari milidetik menjadi mikrodetik. Banyak kode itu
mengharapkan tidak ada waktu sub kedua mulai melanggar karena ekstra
detail. Perbaikannya adalah 'CURRENT_TIME [(presisi)]' tetapi kompromi pada
default menghasilkan CURRENT_TIMESTAMP. = CURRENT_DATE + CURRENT_TIME
kecuali jika Anda benar-benar menyetel ketepatan keduanya agar cocok
untuk diubah menjadi string dan ibase. timestampformat menyaring
bagian pecahan pula, dan bahkan detik dapat dipangkas jika
sesuai, jadi format string 'default' akan menyelesaikan masalah
membandingkan data waktu dari berbagai sumber?--
Lester Caine - G8HFL
L. S. Layanan Elektronik Caine - http. // lsces. bersama. inggris
EnquirySolve - http. //penyelesaian pertanyaan. com/
Lokakarya Model Insinyur Digital - http. //medw. bersama. inggris
Media Digital Pelangi - http. //rainbowdigitalmedia. bersama. inggris
belum dibaca
Hai,
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki
beberapa isuBeberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
- Tidak ada cara mudah untuk menyetel mikrodetik ke 0, Anda harus memanggil setTime see
https. //3v4l. org/YUhFF Metode setMicroseconds akan berguna dan/atau mendukung
ke string relatif untuk menyetel mikrodetik ke 0 (seperti halnya tengah malam untuk
H. i. s). Atau apakah saya melewatkan sesuatu?
- Anda juga tidak dapat mengatur bagian detik atau menit saja,
melalui setTime(). Mikrodetik hanyalah perpanjangan waktu
bagian- Menggunakan "tengah malam" juga menyetel mikrodetik ke 0
DateTime baru ('sekarang tengah malam') jelas tidak akan berfungsi
[PHP. 7. 1. 0-dev ] derick@whisky. ~ $cat /tmp/tengah malam. php
[PHP. 7. 1. 0-dev ] derick@whisky. ~ $php -n /tmp/tengah malam. php
objek(DateTimeImmutable)#1 (3) {
["tanggal"]=>
string(26) "2016-11-08 12. 01. 20. 023680"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
objek(DateTimeImmutable)#2 (3) {
["tanggal"]=>
string(26) "2016-11-08 00. 00. 00. 000000"
["timezone_type"]=>
int(3)
["zona waktu"]=>
string(3) "UTC"
}
- Dukungan mikrodetik berguna, menurut saya bukan secara default. Kenapa tidak
perkenalkan parameter ke-3 $with_microseconds/$set_microseconds yang
default ke salah?Parameter ke-3 untuk fungsi yang mana?
Dengan argumen ke-3 yang saya maksud adalah konstruktor
DateTime publik. __construct([ string $time = "sekarang" [, DateTimeZone
$zona waktu = NULL, [ $initialize_microseconds = false ]]] )
Ketika mikrodetik TIDAK ditentukan dalam $time, jangan atur kecuali
$initialize_microseconds benar
oleh Lester Caine — lihat sumberAtau DateTimeWithMicroseconds kelas kedua?
tapi sangat jelas apa yang akan terjadiTapi itu akan menjadi duplikat. DateTime dan
Kelas DateTimeImmutable sudah mendukung mikrodetik. Menambahkan tambahan
kelas untuk mereka, hanya akan membingungkan
- Parameter ke-4 untuk setTime() seharusnya tidak menyebabkan kerusakan BC
Menambahkan argumen baru tambahan dengan nilai default, bukan pemutusan BC
Bersulang,
Derick
belum dibaca
Dukungan untuk mikrodetik ditambahkan di akhir 7. 1 siklus RC, namun memiliki
beberapa isu
Beberapa dukungan tambahan untuk mikrodetik ditambahkan di PHP 7. 1
siklus, sebagian besar untuk mendukung perbaikan bug yang telah ada sejak lama
waktu
Kami memiliki masalah yang sama ketika resolusi waktu dari Firebird
meningkat dari milidetik menjadi mikrodetik. Banyak kode itu
mengharapkan tidak ada waktu sub kedua mulai melanggar karena ekstra
detail. Perbaikannya adalah 'CURRENT_TIME [(presisi)]' tetapi kompromi pada
default menghasilkan CURRENT_TIMESTAMP. = CURRENT_DATE + CURRENT_TIME
kecuali jika Anda benar-benar menyetel ketepatan keduanya agar cocok
Di PHP itu sebenarnya bukan masalah karena data yang dikembalikan memiliki
untuk diubah menjadi string dan ibase. timestampformat menyaring
bagian pecahan pula, dan bahkan detik dapat dipangkas jika
sesuai, jadi format string 'default' akan menyelesaikan masalah
membandingkan data waktu dari berbagai sumber?
--
Lester Caine - G8HFL
Kontak - http. // lsces. bersama. uk/wiki/?page=contact
L. S. Layanan Elektronik Caine - http. // lsces. bersama. inggris
EnquirySolve - http. //penyelesaian pertanyaan. com/
Lokakarya Model Insinyur Digital - http. //medw. bersama. inggris
Media Digital Pelangi - http. //rainbowdigitalmedia. bersama. inggris