Aku ingin membiarkan pengguna dengan mudah menambah dan mengurangi tanggal menggunakan JavaScript dalam rangka untuk menelusuri entri oleh tanggal.
Tanggal dalam format: "mm/dd/yyyy". Saya ingin mereka untuk dapat klik "Next" tombol, dan jika tanggal: " 06/01/2012" kemudian dengan mengklik berikutnya, itu harus menjadi: "06/02/2012". Jika mereka klik 'prev' tombol maka itu harus menjadi, "05/31/2012".
Perlu untuk melacak tahun kabisat, jumlah hari dalam bulan, dll.
Ada ide?
P. S menggunakan AJAX untuk mendapatkan tanggal dari server isn't option, yang sedikit laggy dan tidak pengalaman bagi pengguna yang diinginkan klien.
Kode:
var date = new Date('2011', '01', '02');
alert('the original date is ' + date);
var newdate = new Date(date);
newdate.setDate(newdate.getDate() - 7); // minus the date
var nd = new Date(newdate);
alert('the new date is ' + nd);
Menggunakan Datepicker:
$("#in").datepicker({
minDate: 0,
onSelect: function(dateText, inst) {
var actualDate = new Date(dateText);
var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1);
$('#out').datepicker('option', 'minDate', newDate );
}
});
$("#out").datepicker();
[Demo JSFiddle][2]
Hal-hal ekstra yang mungkin berguna:
getDate() Returns the day of the month (from 1-31)
getDay() Returns the day of the week (from 0-6)
getFullYear() Returns the year (four digits)
getHours() Returns the hour (from 0-23)
getMilliseconds() Returns the milliseconds (from 0-999)
getMinutes() Returns the minutes (from 0-59)
getMonth() Returns the month (from 0-11)
getSeconds() Returns the seconds (from 0-59)
Link bagus: [MDN Tanggal][1]
Anda perlu menggunakan getTime()
dan setTime()
untuk menambah atau mengurangi waktu dalam javascript Upload objek. Menggunakan setDate()
dan getDate()
akan menyebabkan kesalahan ketika mencapai batas dari bulan 1, 30, 31, dll.
Menggunakan waktu memungkinkan anda untuk mengatur offset dalam milidetik, dan membiarkan objek Tanggal angka sisanya:
var now=new Date();
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day;
now.setTime( yesterdayMs );
JavaScript Tanggal
objek dapat membantu di sini.
Langkah pertama adalah untuk mengkonversi string untuk Date
kasus. Yang's mudah dilakukan:
var str = "06/07/2012"; // E.g., "mm/dd/yyyy";
var dt = new Date(parseInt(str.substring(6), 10), // Year
parseInt(str.substring(0, 2), 10) - 1, // Month (0-11)
parseInt(str.substring(3, 5), 10)); // Day
Kemudian anda dapat melakukan segala macam perhitungan yang berguna. JavaScript tanggal mengerti tahun kabisat dan semacamnya. Mereka menggunakan ideal konsep "" yang persis 86,400 detik. Mereka mendasari nilai adalah jumlah milidetik sejak Epoch (tengah malam, Jan 1, 1970); itu bisa menjadi angka negatif untuk tanggal sebelum Zaman.
Lebih lanjut di MDN halaman Upload
.
Anda mungkin juga mempertimbangkan untuk menggunakan perpustakaan seperti MomentJS, yang akan membantu dengan parsing, melakukan upload matematika, format...
Mungkin ini bisa membantu
<script type="text/javascript" language="javascript">
function AddDays(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() + parseInt(toAdd));
document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear();
}
function SubtractDays(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() - parseInt(toAdd));
document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear();
}
</script>
---------------------- UI ---------------
<div id="result">
</div>
<input type="text" value="0" onkeyup="AddDays(this.value);" />
<input type="text" value="0" onkeyup="SubtractDays(this.value);" />
//In order to get yesterday's date in mm/dd/yyyy.
function gimmeYesterday(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() - parseInt(toAdd));
var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear();
$("#endDate").html(yesterDAY);
}
$(document).ready(function() {
gimmeYesterday(1);
});
anda bisa coba di sini:
Bekerja sama dengan tanggal di javascript selalu sedikit kerumitan. Aku selalu berakhir menggunakan perpustakaan. Moment.js dan XDate keduanya besar:
Biola:
var $output = $('#output'),
tomorrow = moment().add('days', 1);
$('<pre />').appendTo($output).text(tomorrow);
tomorrow = new XDate().addDays(-1);
$('<pre />').appendTo($output).text(tomorrow);
Cara yang aku suka, jika anda memiliki kencan objek yang dapat anda kurangi lain tanggal obyek dari itu untuk mendapatkan perbedaan. Tanggal obyek yang didasarkan pada milidetik dari tanggal tertentu.
var date1 = new Date(2015, 02, 18); // "18/03/2015", month is 0-index
var date2 = new Date(2015, 02, 20); // "20/03/2015"
var msDiff = date2 - date1; // 172800000, this is time in milliseconds
var daysDiff = msDiff / 1000 / 60 / 60 / 24; // 2 days
Jadi, ini adalah bagaimana anda mengurangi tanggal. Sekarang jika anda ingin menambahkannya? date1 + date2 memberikan kesalahan.. Tapi jika saya ingin mendapatkan waktu di ms dapat saya gunakan:
var dateMs = date1 - 0;
// say I want to add 5 days I can use
var days = 5;
var msToAdd = days * 24 * 60 * 60 * 1000;
var newDate = new Date(dateMs + msToAdd);
Dengan mengurangkan 0 anda mengubah objek tanggal dalam milidetik format.
Anda dapat menggunakan native javascript Upload objek untuk melacak tanggal. Ini akan memberi anda tanggal saat ini, membiarkan anda melacak kalender tertentu barang-barang, dan bahkan membantu anda mengatur zona waktu yang berbeda. Anda dapat menambah dan mengurangi hari/jam/detik untuk mengubah tanggal anda bekerja dengan atau untuk menghitung tanggal baru.
lihatlah ini referensi objek untuk mempelajari lebih lanjut:
Harapan yang membantu!
var date = new Date('your date string here'); // e.g. '2017-11-21'
var newdate = new Date(date.getTime() + 24*60*60*1000 * days) // days is the number of days you want to shift the date by
Ini adalah satu-satunya solusi yang bekerja andal ketika menambahkan/mengurangkan di bulan dan tahun. Menyadari hal ini setelah menghabiskan terlalu banyak waktu penyia-nyiaan waktu dengan getDate dan setDate metode, mencoba untuk menyesuaikan untuk bulan/tahun bergeser.
decasteljau (di thread ini) sudah menjawab hal ini, tetapi hanya ingin menekankan kegunaan dari metode ini karena 90% dari jawaban di luar sana merekomendasikan getDate dan setDate pendekatan.
Tanggal terbaik utilitas I've yang digunakan adalah tanggal-fns untuk beberapa alasan:
Tanggal
format.Package manager:
"tanggal-fns": "^1.30.1"
Kode:
impor { addDays, subDays } dari 'tanggal-fns'
let today = new Date()
let yesterday = subDays(today, 1)
let tomorrow = addDays(today, 1)
Sederhana dan mengagumkan.
Sesuatu yang saya gunakan (jquery diperlukan), dalam naskah saya yang saya butuhkan untuk hari saat ini, tapi tentu saja anda dapat mengeditnya sesuai.
HTML:
<label>Date:</label><input name="date" id="dateChange" type="date"/>
<input id="SubtractDay" type="button" value="-" />
<input id="AddDay" type="button" value="+" />
JavaScript:
var counter = 0;
$("#SubtractDay").click(function() {
counter--;
var today = new Date();
today.setDate(today.getDate() + counter);
var formattedDate = new Date(today);
var d = ("0" + formattedDate.getDate()).slice(-2);
var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2);
var y = formattedDate.getFullYear();
$("#dateChange").val(d + "/" + m + "/" + y);
});
$("#AddDay").click(function() {
counter++;
var today = new Date();
today.setDate(today.getDate() + counter);
var formattedDate = new Date(today);
var d = ("0" + formattedDate.getDate()).slice(-2);
var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2);
var y = formattedDate.getFullYear();
$("#dateChange").val(d + "/" + m + "/" + y);
});
[jsfiddle][1]