Saya ingin mendapatkan objek Date yang 30 menit lebih lambat dari objek Date lainnya. Bagaimana saya melakukannya dengan JavaScript?
javascript
date
date-manipulation
Morgan Cheng
sumber
sumber
date.setMinutes(date.getMinutes() + ...)
akan gagal melintasi batas Daylight Saving. Misalnya (dengan asumsi '2014-03-09' adalah batas Daylight Saving):var d = new Date('2014-03-09 01:59:00'), f = new Date(d.getTime()); d.setMinutes(d.getMinutes() + 30);
d
sekarang 30 menit lebih awal, tidak lebih lambat darif
.f
dand
, Anda akan melihat yang satu mengatakan "GMT-0500" yang lain mengatakan "GMT-0400" (atau apa pun zona waktu Anda). Juga, jika Anda memanggil.getTime()
keduanyaf
dand
, Anda akan melihat bahwaf
lebih besar darid
(yaitu nanti).01:89
akan menjadi02:29
, yang tidak ada pada hari Anda "maju". Chrome memutuskan itu seharusnya01:29
, FF memutuskan03:29
. Pada malam ketika Anda "mundur", kedua browser melewatkan jam "mundur" dan melompat ke depan selama 90 menit, untuk02:29
. Berikut ini beberapa demo JSFiddle: "maju ke depan" / "mundur"Jawaban:
Menggunakan Perpustakaan
Jika Anda melakukan banyak pekerjaan kencan, Anda mungkin ingin melihat perpustakaan tanggal JavaScript seperti Datejs atau Moment.js . Misalnya, dengan Moment.js, ini hanyalah:
Vanilla Javascript
Ini seperti jawaban kekacauan , tetapi dalam satu baris:
Di mana
diff
perbedaan dalam menit yang Anda inginkan darioldDateObj
waktu. Bahkan bisa negatif.Atau sebagai fungsi yang dapat digunakan kembali, jika Anda perlu melakukan ini di banyak tempat:
Dan kalau-kalau ini tidak jelas, alasan kami melipatgandakan menit
60000
adalah untuk mengubah menit menjadi milidetik.Hati-hati dengan Vanilla Javascript. Tanggal Itu Sulit!
Anda mungkin berpikir Anda dapat menambahkan 24 jam ke tanggal untuk mendapatkan tanggal besok, bukan? Salah!
Ternyata, jika pengguna mengamati waktu musim panas, sehari belum tentu 24 jam. Ada satu hari setahun yang panjangnya hanya 23 jam, dan satu hari setahun yang panjangnya 25 jam. Misalnya, di sebagian besar Amerika Serikat dan Kanada, 24 jam setelah tengah malam, 2 November 2014, masih 2 November:
Inilah sebabnya mengapa menggunakan salah satu perpustakaan yang disebutkan sebelumnya adalah taruhan yang lebih aman jika Anda harus melakukan banyak pekerjaan dengan ini.
Di bawah ini adalah versi yang lebih umum dari fungsi ini yang saya tulis. Saya masih merekomendasikan menggunakan perpustakaan, tetapi itu mungkin berlebihan / tidak mungkin untuk proyek Anda. Sintaks dimodelkan setelah fungsi MySQL DATE_ADD .
Demo jsFiddle bekerja .
sumber
sumber
Date
objek.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
sumber
setTime
mengembalikan cap waktu milidetik numerik, bukan objek tanggal. (Jangan pikir Anda bisa melakukan one-liner.)var in30Mins = new Date(+new Date() + 1.8e6)
adalah liner satu, tetapi tidak yakin itu lebih baik dari liner dua. ;-)sumber
setMinutes
mengembalikan stempel waktu, tetapinow
tetap menjadiDate
objek, jadinow = new Date(now)
usangMungkin kira-kira seperti ini?
sumber
Date
objek.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
If a parameter you specify is outside of the expected range, setMinutes() attempts to update the date information in the Date object accordingly.
Saya selalu membuat 7 fungsi, untuk bekerja dengan tanggal di JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.
Anda dapat melihat contoh di sini: http://jsfiddle.net/tiagoajacobi/YHA8x/
Cara Penggunaan:
Ini fungsinya:
sumber
date.addHours(3, 30)
menambahkan 3 jam dan 30 menit. addYears akan membutuhkan waktu bertahun-tahun, berbulan-bulan dan berhari-hari, addMonth akan membutuhkan waktu berbulan-bulan, berhari-hari AddMinutes akan memakan waktu beberapa menit, detik, milidetik, dll.new Date().addHours(4).addMinutes(45);
Anda dapat memanggil sebanyak yang Anda inginkan, karena metode mengembalikan "ini" yang merupakan Objek Tanggal saat ini.var dt = new Date();
laludt.addMinutes(45); dt.addHours(4);
atau bahkandt.addMinutes(285);
atau jugadt.addMinutes(45).addHours(4);
semua akan bekerja. Jika Anda memiliki pertanyaan dengan beberapa contoh kode, untuk masalah Anda posting di sini saya akan dengan senang hati membantu Anda.Cara termudah untuk menyelesaikannya adalah dengan mengenali bahwa pada tanggal javascript hanya angka. Itu dimulai
0
atau'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Setiap1
mewakili satu milidetik. Anda dapat menambah atau mengurangi milidetik dengan mendapatkan nilai dan membuat tanggal baru menggunakan nilai itu. Anda dapat mengaturnya dengan mudah dengan pikiran itu.sumber
Inilah yang saya lakukan yang tampaknya bekerja dengan cukup baik:
Maka Anda bisa memanggil ini seperti ini:
sumber
return new Date(this.getTime() + minutes * 60000);
, saya copyDate sementara tidak diperlukan. ;-)Ini adalah versi ES6 :
Sebut saja seperti:
sumber
Saya merasa banyak jawaban di sini tidak memiliki komponen kreatif, sangat dibutuhkan untuk perhitungan perjalanan waktu. Saya menyajikan solusi saya untuk terjemahan temporal 30 menit.
(jsfiddle di sini )
sumber
Untuk yang malas seperti saya:
Jawaban Kip (dari atas) dalam coffeescript, menggunakan "enum", dan beroperasi pada objek yang sama:
sumber
Gunakan perpustakaan yang ada yang dikenal untuk menangani kebiasaan yang terlibat dalam berurusan dengan perhitungan waktu. Favorit saya saat ini adalah moment.js .
sumber
Hanya pilihan lain, yang saya tulis:
Perpustakaan DP_DateExtensions
Ini berlebihan jika ini semua pengolahan tanggal yang Anda butuhkan, tetapi itu akan melakukan apa yang Anda inginkan.
Mendukung pemformatan tanggal / waktu, matematika tanggal (menambah / mengurangi bagian tanggal), membandingkan tanggal, penguraian tanggal, dll. Ini bersumber terbuka secara bebas.
sumber
Anda bisa melakukan ini:
sumber
Ini satu-liner saya:
sumber
Anda harus mendapatkan nilai tanggal saat ini untuk mendapatkan tanggal dengan (ms) dan menambahkan (30 * 60 * 1000) ke dalamnya. Sekarang Anda memiliki (tanggal saat ini + 30 menit) dengan ms
sumber
Saya tahu bahwa topiknya terlalu lama. Tetapi saya cukup yakin bahwa ada beberapa pengembang yang masih membutuhkan ini, jadi saya membuat skrip sederhana ini untuk Anda. Kuharap kamu menikmatinya!
sumber