Apakah objek tanggal Javascript selalu libur satu hari?

238

Di aplikasi Java Script saya, tanggal saya disimpan dalam format seperti ini:

2011-09-24

Sekarang ketika saya mencoba menggunakan nilai di atas untuk membuat objek Date baru (jadi saya dapat mengambil tanggal dalam format yang berbeda), tanggal selalu kembali satu hari libur. Lihat di bawah:

var doo = new Date("2011-09-24");
console.log(doo);

log:

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
pungutan
sumber
11
Kelas Date Javascript tidak merepresentasikan tanggal, ini mewakili timestamp (sama dengan Java). Untuk menjadikannya kencan, ia menggunakan zona waktu dan itulah penyebab masalah Anda. Ini mem-parsing dengan zona waktu GMT / UTC (24 Sep 2011, 00 : 00 UTC) dan kemudian output dengan zona waktu 4 jam yang berbeda (23 Sep 2011, 20 : 00 GMT-0400).
Codo
2
Saya mendapatkan "tanggal tidak valid". Ganti karakter '-' dengan karakter '/' dan coba lagi. Atau pisahkan tanggal menjadi bit-bitnya dan tetapkan komponen satu per satu (jika Anda melakukannya, kurangi 1 dari angka bulan).
RobG
@Codo - ya, balasan yang bagus. ECMA-262 15.9.1.15 berlaku. OP harus menggunakan "2011-09-24T20: 00: 00-04: 00" atau serupa.
RobG
1
Saya menemukan bahwa format "Sep 24 2011" akan mengembalikan tanggal yang tepat. Lihat di sini untuk penjelasan: stackoverflow.com/questions/2587345/javascript-date-parse
christurnerio

Jawaban:

98

Perhatikan bahwa Eastern Daylight Time adalah -4 hoursdan jam pada tanggal Anda kembali adalah 20.

20h + 4h = 24h

yaitu tengah malam 2011-09-24. Tanggal diuraikan dalam UTC (GMT) karena Anda memberikan string hanya tanggal tanpa indikator zona waktu. Jika Anda memberikan string tanggal / waktu sebagai gantinya indikator ( new Date("2011-09-24T00:00:00")), itu akan diuraikan dalam zona waktu lokal Anda. (Secara historis ada inkonsistensi di sana, paling tidak karena spek berubah lebih dari sekali, tetapi peramban modern harusnya oke; atau Anda selalu dapat menyertakan indikator zona waktu.)

Anda mendapatkan tanggal yang tepat, Anda tidak pernah menentukan zona waktu yang benar.

Jika Anda perlu mengakses nilai tanggal, Anda dapat menggunakan getUTCDate()atau salah satu dari getUTC*()fungsi lainnya :

var d,
    days;
d = new Date('2011-09-24');
days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
console.log(days[d.getUTCDay()]);
zzzzBov
sumber
24
Bagaimana Anda "menentukan zona waktu yang benar"? Konstruktor tanggal selalu mengartikan string tanggal sebagai UTC, tetapi kemudian menyesuaikan zona waktu. Saya bahkan dapat melakukan `Tanggal baru ('2012-01-02 EDT') dan masih memindahkannya kembali ke hari sebelumnya karena menerapkan offset untuk penghematan siang hari, yang tidak masuk akal karena jika saya katakan itu adalah tanggal sesuai zona waktu lokal EDT saat ini, maka jangan menerapkan offset tambahan untuk itu. Saya katakan zona waktu itu EDT tetapi masih menerapkan offset tambahan memindahkannya kembali suatu hari.
AaronLS
1
@AaronLS, EDTadalah waktu musim panas (juga dikenal sebagai musim panas) , ESTadalah zona waktu yang berlaku pada bulan Januari.
zzzzBov
1
Membuatnya hanya sebagai UTC dari sebuah string akan menjadi apa yang ingin saya lakukan, karenanya mengapa saya bertanya "Bagaimana Anda" menentukan zona waktu yang benar "?" tentang tempat Anda menyatakan "Anda tidak pernah menentukan zona waktu yang benar.". Jika saya melakukannya new Date('2012-01-01 GMT')masih berlaku offset karena mengkonversikannya ke waktu tanggal lokal pengguna.
AaronLS
7
@ AaronLS, jika Anda terpaksa menggunakan get*metode dan memerlukannya untuk mengembalikan tanggal / waktu yang benar termasuk offset zona waktu yang tidak diketahui, cukup tambahkan offset zona waktu yang tidak dikenal: d = new Date('2013-01-08 GMT'); d.setMinutes(d.getMinutes() + d.getTimezoneOffset());Ini akan menormalkan tanggal ke lokal pengguna sehingga .get*metode kembali nilai yang diharapkan. .getUTC*Metode - metode itu akan salah, jadi berhati-hatilah.
zzzzBov
1
Ada perbedaan antara mendefinisikan perilaku untuk memberikan referensi dan menggunakannya sebagai jalan keluar ketika implementor gagal mengimplementasikan sesuatu dengan benar. Dan itu bukan representasi yang sama jika data tidak sesuai dengan harapan.
Dissident Rage
252

Ada beberapa hal gila yang terjadi dengan objek JS DATE yang mengonversi string, misalnya pertimbangkan tanggal berikut yang Anda berikan

Catatan: Contoh-contoh berikut mungkin atau mungkin tidak SATU HARI, tergantung pada zona waktu ANDA dan waktu saat ini.

new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

Namun, jika kami mengatur ulang format string ke Bulan-Hari-Tahun ...

new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

Satu lagi yang aneh

new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.

new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

Kami dapat dengan mudah mengubah tanda hubung pada tanggal Anda "2011-09-24" saat membuat tanggal baru

new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

Bagaimana jika kita memiliki string tanggal seperti "2011-09-24T00: 00: 00"

new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

Sekarang ganti tanda hubung untuk meneruskan tebasan seperti sebelumnya; apa yang terjadi?

new Date("2011/09/24T00:00:00");
// => Invalid Date

Saya biasanya harus mengelola format tanggal 2011-09-24T00: 00: 00 jadi ini yang saya lakukan.

new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

MEMPERBARUI

Jika Anda memberikan argumen terpisah ke konstruktor Tanggal Anda bisa mendapatkan hasil berguna lainnya seperti yang dijelaskan di bawah ini

Catatan: argumen bisa bertipe Number atau String. Saya akan menunjukkan contoh dengan nilai campuran.

Dapatkan bulan dan hari pertama tahun tertentu

new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)

Dapatkan bulan dan hari terakhir dalam setahun

new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)

Contoh Angka, argumen String. Perhatikan bulan adalah Maret karena bulan berbasis nol lagi.

new Date(2011, "02"); 
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)

Jika kita melakukan hal yang sama tetapi dengan hari nol, kita mendapatkan sesuatu yang berbeda.

new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)

Menambahkan hari nol ke argumen tahun dan bulan apa pun akan mendapatkan hari terakhir bulan sebelumnya. Jika Anda melanjutkan dengan angka negatif, Anda dapat terus melanjutkan kembali di lain hari

new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)
SoEzPz
sumber
12
Ini sebenarnya membantu saya yang terbaik. Saya baru saja menambahkan .replace (/ - / g, '\ /'). Ganti (/ T. + /, '') Ke akhir data saya ketika saya membuat tanggal baru. Sangat mudah!
Devin Prejean
64
Wow - javascript sangat tidak konsisten.
psparrow
2
Panggilan .replace () benar-benar membantu dalam keadaan darurat malam ini.
tidak digunakan
2
ya saya sudah menguji semua ini, dan ini benar-benar aneh.
chintan adatiya
27
Semua ini adalah karena perilaku Date.parse () yang mendasarinya mencoba untuk mengikuti ISO 8601. Ketika string tanggal mengikuti format yyyy-mm-dd, itu diasumsikan sebagai ISO 8601 dengan UTC 00:00 implisit. Ketika string menyimpang dari format (mis. Mm-dd-yyyy atau slash bukannya hyphen), string jatuh kembali ke parser yang lebih longgar menurut RFC 2822 yang menggunakan waktu lokal ketika zona waktu tidak ada. Harus diakui, ini semua akan sangat misterius bagi orang kebanyakan.
Mizstik
71

Untuk menormalkan tanggal dan menghilangkan offset yang tidak diinginkan (diuji di sini: https://jsfiddle.net/7xp1xL5m/ ):

var doo = new Date("2011-09-24");
console.log(  new Date( doo.getTime() + Math.abs(doo.getTimezoneOffset()*60000) )  );
// Output: Sat Sep 24 2011 00:00:00 GMT-0400 (Eastern Daylight Time)

Ini juga mencapai hal yang sama dan memberikan kredit kepada @tpartee (diuji di sini: https://jsfiddle.net/7xp1xL5m/1/ ):

var doo = new Date("2011-09-24");
console.log( new Date( doo.getTime() - doo.getTimezoneOffset() * -60000 )  );
AaronLS
sumber
Ini berhasil bagi saya - saya harus bekerja dengan tanggal dari API lalu mengurutkan / membandingkannya, jadi cukup menambahkan zona waktu offset berfungsi paling baik.
chakeda
Ini bekerja untuk saya kecuali saya harus mengurangi timeZoneOffset, bukan menambahkannya
ErikAGriffin
@ErikAGriffin Apakah Anda berada di zona waktu positif, yaitu IE GMT + 0X00 bukannya GMT-0X00?
AaronLS
Saya melakukan sesuatu yang serupa:doo.setMinutes(doo.getMinutes() + doo.getTimezoneOffset())
Pembangkang
2
@ AaronLS Anda berada di jalur yang benar tetapi logika sedikit salah. Untuk mengimbangi offset TZ, logika yang benar adalah: console.log (Tanggal baru (doo.getTime () - doo.getTimezoneOffset () * -60000)); - Tanda offset adalah penting dan tidak dapat dimatikan tetapi Anda juga membutuhkan tanda terbalik untuk koreksi sehingga kami melipatgandakan offset tersebut dengan -60000 agar tanda terbalik berlaku.
penerima tamu
28

Jika Anda ingin mendapatkan jam 0 dari beberapa tanggal di zona waktu lokal, berikan masing-masing bagian tanggal ke Datekonstruktor.

new Date(2011,08,24); // month value is 0 based, others are 1 based.
lincolnk
sumber
26

Hanya ingin menambahkan yang tampaknya menambahkan spasi di akhir string akan menggunakan UTC untuk pembuatan.

new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)

Sunting: Ini bukan solusi yang disarankan, hanya jawaban alternatif. Tolong jangan gunakan pendekatan ini karena sangat tidak jelas apa yang terjadi. Ada beberapa cara seseorang bisa memperbaiki ini secara tidak sengaja menyebabkan bug.

Kyle Shrader
sumber
Sebagai contoh dengan spasi di akhir, konsol mengembalikan "Tanggal Tidak Valid = $ 2"
Brian Risk
1
bekerja dengan sangat baik! Date baru (data.Date + "") .toLocaleDateString ("en-US")
Nakres
Agar adil, ini hanya jawaban alternatif, dan bukan solusi yang disarankan.
Kyle Shrader
25

Saya percaya itu ada hubungannya dengan penyesuaian zona waktu. Tanggal yang Anda buat adalah dalam GMT dan waktu default adalah tengah malam, tetapi zona waktu Anda adalah EDT, sehingga mengurangi 4 jam. Coba ini untuk memverifikasi:

var doo = new Date("2011-09-25 EDT");
FishBasketGordo
sumber
3
Ini jawaban terbaik di sini. +1 juta untuk menggunakan string pelokalan zona waktu bawaan alih-alih mengonversi secara terprogram.
Blearn
2
Yang ini membantu. Ia bekerja seperti ini: $ scope.dat = Tanggal baru (datestring + 'EDT'). Perhatikan perbedaan antara EDT dan EST: tautan
Weihui Guo
Saya tidak tahu apa yang terjadi di balik layar, tetapi itu bekerja dengan sempurna.
the_haystacker
Ini akan saya katakan adalah yang paling sederhana dari jawaban dan kurang memformat ulang kode.
Michael
Terima kasih, saya menganggap cara terbaik untuk saya.
Janderson Constantino
11

Masalah Anda secara khusus dengan zona waktu. Catatan bagian GMT-0400- yaitu Anda berada 4 jam di belakang GMT. Jika Anda menambahkan 4 jam ke tanggal / waktu yang ditampilkan, Anda akan mendapatkan tepat tengah malam 2011/09/24. Gunakan toUTCString()metode sebagai gantinya untuk mendapatkan string GMT:

var doo = new Date("2011-09-24");
console.log(doo.toUTCString());
Aleks G
sumber
7

Ini mungkin bukan jawaban yang baik, tetapi saya hanya ingin berbagi pengalaman saya dengan masalah ini.

Aplikasi saya secara global menggunakan tanggal utc dengan format 'YYYY-MM-DD', sedangkan plugin datepicker yang saya gunakan hanya menerima tanggal js, sulit bagi saya untuk mempertimbangkan utc dan js. Jadi ketika saya ingin memberikan tanggal yang diformat 'YYYY-MM-DD' ke datepicker saya, saya pertama-tama mengonversinya ke format 'MM / DD / YYYY' menggunakan moment.js atau apa pun yang Anda suka, dan tanggal yang ditampilkan pada datepicker sekarang benar. Sebagai contoh Anda

var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale

Rupanya d1 adalah apa yang saya inginkan. Semoga ini bisa bermanfaat bagi sebagian orang.

Jie Zhang
sumber
1
Hanya mengganti format seperti yang Anda lakukan, bekerja sama untuk saya. Sangat aneh.
Jac
5

Ini melalui saya untuk satu lingkaran, memberi +1 pada jawaban zzzBov. Ini adalah konversi penuh tanggal yang berfungsi untuk saya menggunakan metode UTC:

//myMeeting.MeetingDate = '2015-01-30T00:00:00'

var myDate = new Date(myMeeting.MeetingDate);
//convert to JavaScript date format
//returns date of 'Thu Jan 29 2015 19:00:00 GMT-0500 (Eastern Standard Time)' <-- One Day Off!

myDate = new Date(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate());
//returns date of 'Fri Jan 30 2015 00:00:00 GMT-0500 (Eastern Standard Time)' <-- Correct Date!
cmartin
sumber
4

Artinya 2011-09-24 00:00:00 GMT, dan karena Anda berada di GMT -4, itu akan menjadi 20:00hari sebelumnya.

Secara pribadi, saya mengerti 2011-09-24 02:00:00, karena saya tinggal di GMT +2.

pimvdb
sumber
3

Meskipun dalam kasus OP zona waktu adalah EDT, tidak ada jaminan pengguna yang mengeksekusi skrip Anda akan berada di zona waktu EDT, jadi hardcoding offset tidak akan selalu berfungsi. Solusi yang saya temukan membagi string tanggal dan menggunakan nilai-nilai terpisah di konstruktor Tanggal.

var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);

Perhatikan bahwa Anda harus memperhitungkan sepotong keanehan JS: bulannya berbasis nol.

Brian Risk
sumber
2

Saya mengalami masalah yang pasti ini ketika klien saya menggunakan Waktu Standar Atlantik. Nilai tanggal yang diambil klien adalah "2018-11-23" dan ketika kode meneruskannya ke new Date("2018-11-23")output untuk klien adalah untuk hari sebelumnya. Saya membuat fungsi utilitas seperti yang ditunjukkan pada cuplikan yang menormalkan tanggal, memberi klien tanggal yang diharapkan.

date.setMinutes(date.getMinutes() + date.getTimezoneOffset());

var normalizeDate = function(date) {
  date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
  return date;
};

var date = new Date("2018-11-23");

document.getElementById("default").textContent = date;
document.getElementById("normalized").textContent = normalizeDate(date);
<h2>Calling new Date("2018-11-23")</h2>
<div>
  <label><b>Default</b> : </label>
  <span id="default"></span>
</div>
<hr>
<div>
  <label><b>Normalized</b> : </label>
  <span id="normalized"></span>
</div>

Gabriel Gates
sumber
2

jika Anda hanya ingin memastikan masing-masing bagian tanggal tetap sama untuk tujuan tampilan, * ini tampaknya berfungsi, bahkan ketika saya mengubah zona waktu saya:

var doo = new Date("2011-09-24 00:00:00")

tambahkan saja angka nol di sana.

Dalam kode saya, saya melakukan ini:

let dateForDisplayToUser = 
  new Date( `${YYYYMMDDdateStringSeparatedByHyphensFromAPI} 00:00:00` )
  .toLocaleDateString( 
    'en-GB', 
    { day: 'numeric', month: 'short', year: 'numeric' }
  )

Dan saya beralih di zona waktu saya di komputer saya dan tanggal tetap sama dengan string tanggal yyyy-mm-dd yang saya dapatkan dari API.

Tetapi apakah saya melewatkan sesuatu? Apakah ini ide yang buruk?

* setidaknya dalam chrome. Ini Tidak berfungsi di Safari! pada tulisan ini

Timothy Mitchell
sumber
Ketika Anda melakukannya .toISOString(), itu kembali 1 hari.
vivek_23
new Date('2019/11/18 05:30:00').toISOString();bekerja untuk saya
vivek_23
1

Cara terbaik untuk menangani ini tanpa menggunakan lebih banyak metode konversi,

 var mydate='2016,3,3';
 var utcDate = Date.parse(mydate);
 console.log(" You're getting back are 20.  20h + 4h = 24h :: "+utcDate);

Sekarang tambahkan saja GMT di tanggal Anda atau Anda dapat menambahkannya.

 var  mydateNew='2016,3,3'+ 'GMT';
 var utcDateNew = Date.parse(mydateNew);
 console.log("the right time that you want:"+utcDateNew)

Langsung: https://jsfiddle.net/gajender/2kop9vrk/1/

Gajender Singh
sumber
1

Saya menghadapi beberapa masalah seperti ini. Tapi masalah saya adalah set off saat mendapatkan tanggal dari database.

ini dimasukkan ke dalam basis data dan dalam format UTC.

2019-03-29 19: 00: 00.0000000 +00: 00

Jadi ketika saya dapatkan dari database dan periksa tanggal itu menambahkan offset dengan itu dan mengirim kembali ke javascript.

masukkan deskripsi gambar di sini

Ini menambah +05: 00 karena ini adalah zona waktu server saya. Klien saya ada di zona waktu yang berbeda +07: 00.

2019-03-28T19: 00: 00 + 05: // // inilah yang saya dapatkan di javascript.

Jadi di sini adalah solusi saya apa yang saya lakukan dengan masalah ini.

var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);

Jadi ketika tanggal berasal dari server dan memiliki server offset maka saya membagi tanggal dan menghapus server offset dan kemudian mengonversi ke tanggal. Ini menyelesaikan masalah saya.

Uxmaan Ali
sumber
1

jika Anda memerlukan solusi sederhana untuk ini lihat:

new Date('1993-01-20'.split('-')); 

masukkan deskripsi gambar di sini

Sebastiao Marcos
sumber
0

Anda menggunakan format string tanggal ISO yang, menurut halaman ini , menyebabkan tanggal dibangun menggunakan zona waktu UTC:

Catatan: parsing string tanggal dengan konstruktor Tanggal (dan Date.parse, mereka setara) sangat tidak disarankan karena perbedaan dan inkonsistensi browser. Dukungan untuk string format RFC 2822 hanya berdasarkan konvensi. Dukungan untuk format ISO 8601 berbeda dalam string hanya tanggal (mis. "1970-01-01") diperlakukan sebagai UTC, bukan lokal.

Jika Anda memformat teks secara berbeda, seperti "Jan 01 1970", maka (setidaknya pada mesin saya) itu menggunakan zona waktu lokal Anda.

Paul Wintz
sumber
0

Mencoba menambahkan 2 sen saya ke utas ini (menguraikan jawaban @ paul-wintz).

Sepertinya saya bahwa ketika konstruktor Tanggal menerima string yang cocok dengan bagian pertama dari format ISO 8601 (bagian tanggal), ia melakukan konversi tanggal yang tepat di zona waktu UTC dengan 0 waktu. Ketika tanggal itu dikonversi ke waktu lokal, pergeseran tanggal dapat terjadi jika tengah malam UTC adalah tanggal yang lebih awal di zona waktu setempat.

new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)

Jika string tanggal dalam format "longgar" lainnya (menggunakan "/" atau tanggal / bulan tidak diisi dengan nol) itu membuat tanggal dalam zona waktu lokal, sehingga tidak ada masalah pergeseran tanggal.

new Date('2020/05/07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

Jadi satu perbaikan cepat, seperti yang disebutkan di atas, adalah mengganti "-" dengan "/" di string Date-diformat ISO Anda.

new Date('2020-05-07'.replace('-','/'))
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
Florin D
sumber
0

Menyimpan yyyy-mm-dddalam format MySql Date Anda harus melakukan hal berikut:

const newDate = new Date( yourDate.getTime() + Math.abs(yourDate.getTimezoneOffset()*60000) );
console.log(newDate.toJSON().slice(0, 10)); // yyyy-mm-dd
Paulo Henrique Guimarães
sumber
-1

Log Anda menghasilkan GMT sehingga Anda ingin menentukan zona waktu Anda:

var doo = new Date("2011-09-24 EST");
bmacx7
sumber
3
Pertanyaan ini sudah memiliki banyak jawaban. Jika Anda tetap ingin menjawab pertanyaan, Anda harus menyebutkan sesuatu yang baru dan jawaban lainnya tidak. Jawaban teratas sudah menjelaskan masalah dengan zona waktu secara lebih rinci.
Calvin Godfrey
Jawaban ini hampir persis sama dengan stackoverflow.com/a/7556642/8828658
arachnid batu
Siapa yang peduli kalau penjelasannya lebih mendalam ... kodenya masih berbeda dengan saya. Milik saya jauh lebih sederhana. Dan ya batu arachnid Anda benar. Salahku.
bmacx7
-3

Nevermind, tidak melihat GMT -0400, yang menyebabkan tanggalnya kemarin

Anda dapat mencoba mengatur "waktu" default menjadi 12:00:00

Haha
sumber
Ya, saya agak cepat dengan jawaban saya, maaf soal itu. Revisi jawabanku.
ChrisH
-3

Berikut ini bekerja untuk saya -

    var doo = new Date("2011-09-24").format("m/d/yyyy");
Venu
sumber
Itu masih tidak akan berhasil selama Anda tidak mengutak-atik zona waktu.
Gar