Bagaimana cara mengatur format tanggal dalam tag input tanggal HTML?
105
Saya bertanya-tanya apakah mungkin untuk menyetel format tanggal di <input type="date"></input>tag html ... Saat ini adalah tttt-bb-hh, sementara saya membutuhkannya dalam format hh-mm-tttt.
Bukankah ini merupakan duplikat dari Menentukan nilai keluaran dari input HTML5 type = date? ? Saya akan mengatakan, pertanyaan ini di sini lebih baik ditanyakan daripada pertanyaan yang lebih tua, tetapi pertanyaan yang lebih tua itu memiliki jawaban yang cukup bagus.
Pengaturan negara saya adalah Belanda, dan di Chrome menampilkan DD-MM-YYYY. Sepertinya itu tergantung pada pengaturan jendela klien yang menggunakan situs web.
dark_passages
Jawaban:
11
Kamu tidak.
Pertama, pertanyaan Anda rancu - apakah maksud Anda format yang ditampilkan kepada pengguna, atau format yang dikirimkan ke server web?
Jika yang Anda maksud adalah format yang ditampilkan kepada pengguna, maka ini tergantung pada antarmuka pengguna akhir, bukan apa pun yang Anda tentukan dalam HTML. Biasanya, saya mengharapkannya berdasarkan pada format tanggal yang ditetapkan dalam pengaturan lokal sistem operasi. Tidak masuk akal untuk mencoba menimpanya dengan format pilihan Anda sendiri, karena format yang ditampilkannya (secara umum) adalah yang benar untuk lokal pengguna dan format yang digunakan pengguna untuk menulis / memahami tanggal.
Jika yang Anda maksud adalah format pengirimannya ke server, Anda mencoba memperbaiki masalah yang salah. Yang perlu Anda lakukan adalah memprogram kode sisi server untuk menerima tanggal dalam format tttt-bb-hh.
Sayangnya, komentar kedua Anda tidak sepenuhnya benar di dunia nyata. Beberapa browser, seperti Chrome dan Opera, setidaknya menghormati urutan entitas, meskipun tidak lebih dari itu. Misalnya, pengaturan lokal OS saya menetapkan bahwa sebagai tanggal singkat, hari pertama Agustus tahun ini harus 1 / 8-2016 , tetapi bahkan Chrome dan Opera menunjukkan 01/08/2016 . Browser lain, seperti Safari dan Firefox (setidaknya di OS X) mengabaikan pengaturan OS sepenuhnya dan selalu menampilkan 2016-08-16 apa pun yang terjadi. Di situs di mana pengguna dapat mengatur preferensi tanggal mereka sendiri, tentu masuk akal untuk menimpa ini.
Janus Bahs Jacquet
(Abaikan catatan tentang Firefox dan Safari ... Saya lelah. Tidak ada browser yang mendukung jenis tanggal sama sekali, jadi mereka hanya menampilkan format nilai yang mendasarinya, yang dalam kasus kode saya saat ini adalah YYYY-MM-DD .)
Janus Bahs Jacquet
Apakah sebagian besar orang bertanya bagaimana cara mengubah format tanggal tampilan / masukan yang ingin memungkinkan pengguna mengatur preferensi mereka sendiri, atau menerapkan format tanggal pilihan mereka sendiri di dunia? Yang terakhir adalah sesuatu yang tidak boleh dilakukan oleh siapa pun, seperti yang telah saya katakan, tetapi Anda dapat berdebat dengan cara apa pun tentang apakah yang pertama sesuai. Tapi itu akan menjadi pengaturan presentasi, jadi di luar cakupan HTML.
Stewart
Masalahnya adalah bahwa ini adalah pengaturan presentasi yang tidak dapat diatur . Pengaturan presentasi pada umumnya termasuk dalam CSS, tetapi tidak ada cara untuk mengubahnya di CSS (atau di mana pun). Selain itu, bahkan spesifikasi HTML itu sendiri tidak bebas dari pengaturan penyajian. Misalnya, bagian tentang input[type=password]mengatakan bahwa "agen pengguna harus mengaburkan nilai sehingga orang selain pengguna tidak dapat melihatnya", yang sama banyaknya dengan presentasi yang mengatakan bahwa agen pengguna harus menyajikan tanggal dengan cara tertentu.
Janus Bahs Jacquet
1
Beberapa orang akan mengatakan itu adalah hal yang baik bahwa itu tidak dapat diatur, karena mencegah webmaster untuk membuat format tanggal pilihan mereka sendiri di dunia. Tapi masukan kata sandi membuat saya berpikir. Di banyak tempat, spesifikasi HTML memang memberikan rekomendasi presentasi, yang pada dasarnya merupakan rekomendasi untuk stylesheet default browser. Perbedaannya di sini adalah bahwa sepertinya tidak ada properti CSS untuk aspek presentasi khusus ini.
Stewart
11
Saya menemukan pertanyaan yang sama atau pertanyaan terkait di stackoverflow
Apakah ada cara untuk mengubah format input type = "date"?
Saya menemukan satu solusi sederhana, Anda tidak dapat memberikan Format partikulat tetapi Anda dapat menyesuaikan Seperti ini.
Mengapa tidak menggunakan kontrol tanggal html5 apa adanya, dengan atribut lain yang memungkinkannya berfungsi dengan baik di browser yang mendukung jenis tanggal dan masih berfungsi di browser lain seperti firefox yang belum mendukung jenis tanggal
<inputtype="date"name="input1"placeholder="YYYY-MM-DD"requiredpattern="[0-9]{4}-[0-9]{2}-[0-9]{2}"title="Enter a date in this formart YYYY-MM-DD"/>
<pre> <input type = "text" name = "input1" placeholder = "YYYY-MM-DD" diperlukan pola = "[0-9] {4} - [0-9] {2} - [0-9 ] {2} "title =" Masukkan tanggal dalam format ini YYYY-MM-DD "/> </pre>
Paul IE
8
Persyaratannya jelas, saya kutip - "Saya membutuhkannya dalam format hh-bb-tttt." Bagaimana ini membantu?
Harijs Krūtainis
1
tidak bekerja dengan Firefox. Html ini menampilkan masukan dengan placeholder hh / bb / tttt. Jendela saya dan firefox saya diatur dengan bahasa Belanda sebagai bahasa pertama. Pengaturan regional Windows menunjukkan tanggal pendek: 30-11-2018.
Saya tidak tahu pasti, tapi saya pikir ini seharusnya ditangani oleh browser berdasarkan pengaturan tanggal / waktu pengguna. Coba atur komputer Anda untuk menampilkan tanggal dalam format itu.
Terima kasih atas cuplikan kode ini, yang mungkin memberikan beberapa bantuan langsung. Penjelasan yang tepat akan sangat meningkatkan nilai pendidikannya dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah tersebut, dan akan membuatnya lebih berguna bagi pembaca di masa mendatang dengan pertanyaan yang serupa, tetapi tidak identik. Harap edit jawaban Anda untuk menambahkan penjelasan, dan berikan indikasi batasan dan asumsi apa yang berlaku.
Toby Speight
1
Saya melakukan banyak penelitian dan saya rasa tidak ada yang bisa memaksakan format <input type="date">. Browser memilih format lokal, dan tergantung pada pengaturan pengguna, jika bahasa pengguna dalam bahasa Inggris, tanggal akan ditampilkan ke format bahasa Inggris (bb / hh / tttt).
Menurut saya, solusi terbaik adalah menggunakan plugin untuk mengontrol tampilan.
Saya mendapatkan jawaban yang sedikit berbeda dari apa pun di atas yang pernah saya baca.
Solusi saya menggunakan sedikit JavaScript dan input html.
Tanggal diterima oleh hasil masukan dalam String yang diformat sebagai 'yyyy-mm-dd'. Kita dapat membaginya dan menempatkannya dengan benar sebagai Date () baru.
let userDate = document.getElementById('userDate').value.split('-'),
parsedDate =newDate((`${userDate[1]}-${userDate[2]}-${userDate[0]}`));
Anda dapat memformat tanggal sesuka Anda. Anda dapat membuat Tanggal baru () dan mengambil semua info dari sana ... atau cukup gunakan 'userDate []' untuk membangun string Anda.
Perlu diingat, beberapa cara memasukkan tanggal ke 'Tanggal baru ()' menghasilkan hasil yang tidak terduga. (yaitu - satu hari di belakang)
Saat Anda memposting kode HTML di sini, sangat penting untuk memformatnya sebagai kode. Jika tidak, ini diformat sebagai bagian dari halaman, dan jawaban Anda tidak tampak seperti jawaban. Jika Anda tidak tahu cara memformatnya, ada panduan bagus tentangnya di pusat bantuan
Zoe
0
jawaban langsung singkat tidak atau tidak di luar kotak tetapi saya telah menemukan metode untuk menggunakan kotak teks dan kode JS murni untuk mensimulasikan input tanggal dan melakukan format apa pun yang Anda inginkan, berikut kodenya
<html><body>
date :
<spanstyle="position: relative;display: inline-block;border:1px solid #a9a9a9;height:24px;width:500px"><inputtype="date"class="xDateContainer"onchange="setCorrect(this,'xTime');"style="position: absolute;opacity:0.0;height:100%;width:100%;"><inputtype="text"id="xTime"name="xTime"value="dd / mm / yyyy"style="border: none;height:90%;"tabindex="-1"><spanstyle="display: inline-block;width:20px;z-index:2;float: right;padding-top:3px;"tabindex="-1">▼</span></span><scriptlanguage="javascript">var matchEnterdDate=0;//function to set back date opacity for non supported browsers
window.onload =function(){var input = document.createElement('input');
input.setAttribute('type','date');
input.setAttribute('value','some text');if(input.value ==="some text"){
allDates = document.getElementsByClassName("xDateContainer");
matchEnterdDate=1;for(var i =0; i < allDates.length; i++){
allDates[i].style.opacity ="1";}}}//function to convert enterd date to any formatfunction setCorrect(xObj,xTraget){var date =newDate(xObj.value);var month = date.getMonth();var day = date.getDate();var year = date.getFullYear();if(month!='NaN'){
document.getElementById(xTraget).value=day+" / "+month+" / "+year;}else{if(matchEnterdDate==1){document.getElementById(xTraget).value=xObj.value;}}}</script></body></html>
1- Harap perhatikan bahwa metode ini hanya berfungsi untuk browser yang mendukung tipe tanggal.
2- Fungsi pertama dalam kode JS adalah untuk browser yang tidak mendukung tipe tanggal dan mengatur tampilan ke input teks normal.
3- jika Anda akan menggunakan kode ini untuk beberapa input tanggal di halaman Anda, harap ubah ID "xTime" dari input teks di kedua pemanggilan fungsi dan input itu sendiri menjadi sesuatu yang lain dan tentu saja gunakan nama input yang Anda inginkan untuk formulir kirim.
4-pada fungsi kedua Anda dapat menggunakan format apa pun yang Anda inginkan, bukan hari + "/" + bulan + "/" + tahun misalnya tahun + "/" + bulan + "/" + hari dan dalam input teks gunakan placeholder atau nilai sebagai tttt / bb / hh untuk pengguna saat halaman dimuat.
<styletype="text/css">.dateField {width:150px;height:32px;border: none;position: absolute;top:32px;left:32px;opacity:0.5;font-size:12px;font-weight:300;font-family: Arial;opacity:0;}.fakeDateField {width:100px;/* less, so we don't intercept click on browser chrome for date picker. could also change this at runtime */height:32px;/* same as above */border: none;position: absolute;/* position overtop the date field */top:32px;left:32px;display: visible;font-size:12px;/* same as above */font-weight:300;/* same as above */font-family: Arial;/* same as above */line-height:32px;/* for vertical centering */}</style><inputclass="dateField"id="dateField"type="date"></input><divid="fakeDateField"class="fakeDateField"><em>(initial value)</em></div><script>var dateField = document.getElementById("dateField");var fakeDateField = document.getElementById("fakeDateField");
fakeDateField.addEventListener("click",function(){
document.getElementById("dateField").focus();},false);
dateField.addEventListener("focus",function(){
fakeDateField.style.opacity =0;
dateField.style.opacity =1;});
dateField.addEventListener("blur",function(){
fakeDateField.style.opacity =1;
dateField.style.opacity =0;});
dateField.addEventListener("change",function(){// this method could be replaced by momentJS stuffif(dateField.value.length <1){return;}var date =newDate(dateField.value);var day = date.getUTCDate();var month = date.getUTCMonth()+1;//zero-based month values
fakeDateField.innerHTML =(month <10?"0":"")+ month +" / "+ day;});</script>
Jawaban:
Kamu tidak.
Pertama, pertanyaan Anda rancu - apakah maksud Anda format yang ditampilkan kepada pengguna, atau format yang dikirimkan ke server web?
Jika yang Anda maksud adalah format yang ditampilkan kepada pengguna, maka ini tergantung pada antarmuka pengguna akhir, bukan apa pun yang Anda tentukan dalam HTML. Biasanya, saya mengharapkannya berdasarkan pada format tanggal yang ditetapkan dalam pengaturan lokal sistem operasi. Tidak masuk akal untuk mencoba menimpanya dengan format pilihan Anda sendiri, karena format yang ditampilkannya (secara umum) adalah yang benar untuk lokal pengguna dan format yang digunakan pengguna untuk menulis / memahami tanggal.
Jika yang Anda maksud adalah format pengirimannya ke server, Anda mencoba memperbaiki masalah yang salah. Yang perlu Anda lakukan adalah memprogram kode sisi server untuk menerima tanggal dalam format tttt-bb-hh.
sumber
input[type=password]
mengatakan bahwa "agen pengguna harus mengaburkan nilai sehingga orang selain pengguna tidak dapat melihatnya", yang sama banyaknya dengan presentasi yang mengatakan bahwa agen pengguna harus menyajikan tanggal dengan cara tertentu.Saya menemukan pertanyaan yang sama atau pertanyaan terkait di stackoverflow
Saya menemukan satu solusi sederhana, Anda tidak dapat memberikan Format partikulat tetapi Anda dapat menyesuaikan Seperti ini.
Kode HTML:
Kode CSS:
Kode Javascript:
Keluaran:
sumber
Jika Anda menggunakan jQuery, berikut adalah metode sederhana yang bagus
Atau ada cara tradisional lama:
sumber
Mengapa tidak menggunakan kontrol tanggal html5 apa adanya, dengan atribut lain yang memungkinkannya berfungsi dengan baik di browser yang mendukung jenis tanggal dan masih berfungsi di browser lain seperti firefox yang belum mendukung jenis tanggal
sumber
Saya rasa begitu, dalam HTML tidak ada sintaks untuk format DD-MM-YYYY. Lihat halaman ini http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm . Agak itu akan membantu Anda. Lain gunakan pemilih tanggal javascript.
sumber
Saya tidak tahu pasti, tapi saya pikir ini seharusnya ditangani oleh browser berdasarkan pengaturan tanggal / waktu pengguna. Coba atur komputer Anda untuk menampilkan tanggal dalam format itu.
sumber
sumber
Saya melakukan banyak penelitian dan saya rasa tidak ada yang bisa memaksakan format
<input type="date">
. Browser memilih format lokal, dan tergantung pada pengaturan pengguna, jika bahasa pengguna dalam bahasa Inggris, tanggal akan ditampilkan ke format bahasa Inggris (bb / hh / tttt).Menurut saya, solusi terbaik adalah menggunakan plugin untuk mengontrol tampilan.
Jquery DatePicker tampaknya merupakan pilihan yang baik karena Anda dapat memaksakan lokalisasi , format tanggal ...
sumber
Saya mendapatkan jawaban yang sedikit berbeda dari apa pun di atas yang pernah saya baca.
Solusi saya menggunakan sedikit JavaScript dan input html.
Tanggal diterima oleh hasil masukan dalam String yang diformat sebagai 'yyyy-mm-dd'. Kita dapat membaginya dan menempatkannya dengan benar sebagai Date () baru.
Ini HTML dasar:
Inilah JS dasar:
Anda dapat memformat tanggal sesuka Anda. Anda dapat membuat Tanggal baru () dan mengambil semua info dari sana ... atau cukup gunakan 'userDate []' untuk membangun string Anda.
Perlu diingat, beberapa cara memasukkan tanggal ke 'Tanggal baru ()' menghasilkan hasil yang tidak terduga. (yaitu - satu hari di belakang)
sumber
sumber
jawaban langsung singkat tidak atau tidak di luar kotak tetapi saya telah menemukan metode untuk menggunakan kotak teks dan kode JS murni untuk mensimulasikan input tanggal dan melakukan format apa pun yang Anda inginkan, berikut kodenya
1- Harap perhatikan bahwa metode ini hanya berfungsi untuk browser yang mendukung tipe tanggal.
2- Fungsi pertama dalam kode JS adalah untuk browser yang tidak mendukung tipe tanggal dan mengatur tampilan ke input teks normal.
3- jika Anda akan menggunakan kode ini untuk beberapa input tanggal di halaman Anda, harap ubah ID "xTime" dari input teks di kedua pemanggilan fungsi dan input itu sendiri menjadi sesuatu yang lain dan tentu saja gunakan nama input yang Anda inginkan untuk formulir kirim.
4-pada fungsi kedua Anda dapat menggunakan format apa pun yang Anda inginkan, bukan hari + "/" + bulan + "/" + tahun misalnya tahun + "/" + bulan + "/" + hari dan dalam input teks gunakan placeholder atau nilai sebagai tttt / bb / hh untuk pengguna saat halaman dimuat.
sumber
Untuk Pemformatan dalam hh-bb-tttt
aa = date.split ("-")
tanggal = aa [1] + '-' + aa [2] + '-' + aa [0]
sumber
Implementasi bersih tanpa ketergantungan. https://jsfiddle.net/h3hqydxa/1/
sumber
Inilah solusinya:
semoga ini akan menyelesaikan masalah :)
sumber
Format nilai tanggal adalah
'YYYY-MM-DD'
. Lihat contoh berikutYang Anda butuhkan hanyalah memformat tanggal dalam php, asp, ruby atau apa pun untuk memiliki format itu.
sumber