Dapatkan string ISO dari tanggal tanpa zona waktu

Konfigurasi saya adalah zona waktu Lisbon. Ketika saya melakukan new Date(), saya mendapatkan tanggal/waktu lokal saya saat ini yaitu Fri Apr 28 2017 01:10:55 GMT+0100 (GMT Daylight Time)

Ketika saya mendapatkan string ISO dengan toISOString() itu akan menerapkan zona waktu dan saya akan mendapatkan:

2017-04-28T00:10:55.964Z

Masalahnya adalah bahwa beberapa menit yang lalu waktu tanggalnya seperti ini (kemarin):

2017-04-27T23:45:05.654Z

Saya mencoba moment.js (baru dalam hal ini) dan saya melakukan sesuatu seperti ini

document.write(moment('2017-04-28').format())

Tapi saya mendapatkan ini 2017-04-28T00:00:00:00+01:00 yang bukan 2017-04-28T00:00:00.000Z

Saya ingin mengoper nilai ini sebagai parameter dari metode restful untuk menguraikannya secara otomatis sebagai tipe DateTime, tetapi jika saya mengoper output dari format moment.js maka itu akan diuraikan sebagai 2017-04-27 23:00:00.00

Jika saya membuat tanggal baru dengan new Date() atau dengan new Date('2017-04-27') (bagian tanggal), saya hanya ingin mendapatkan format ISO seperti berikut tanpa waktu tanpa zona waktu

2017-04-28T00:00:00.000Z

Apakah ada metode javascript seperti toISOString() atau mungkin menggunakan moment untuk mendapatkan format tersebut?

Tidak peduli apa zona waktu atau momen hari, saya hanya untuk mensimulasikan bahwa itu adalah tengah malam dari tanggal yang diberikan.

Sangat tidak jelas apa yang Anda tanyakan. Jika Anda menginginkan tanggal UTC dengan jam selalu 0, maka atur jam UTC menjadi 0 dan gunakan toISOString, misalnya

var d = new Date();
d.setUTCHours(0,0,0,0);
console.log(d.toISOString());

Tentu saja ini akan menunjukkan tanggal UTC, yang mungkin berbeda dengan tanggal pada sistem yang menghasilkan Tanggal.

Juga,

new Date('2017-04-27').toISOString();

seharusnya mengembalikan 2017-04-27T00:00:00Z (yaitu harus diurai sebagai UTC menurut ECMA-262, yang bertentangan dengan ISO 8601 yang akan memperlakukannya sebagai lokal), namun itu tidak dapat diandalkan di semua implementasi yang digunakan.

Jika Anda hanya ingin mendapatkan tanggal saat ini dalam format ISO 8601, Anda dapat melakukannya:

if (!Date.prototype.toISODate) {
  Date.prototype.toISODate = function() {
    return this.getFullYear() + '-' +
           ('0'+ (this.getMonth()+1)).slice(-2) + '-' +
           ('0'+ this.getDate()).slice(-2);
  }
}

console.log(new Date().toISODate());

Namun, karena built-in toISOString menggunakan UTC, hal ini mungkin membingungkan. Jika tanggal UTC diperlukan, maka:

if (!Date.prototype.toUTCDate) {
  Date.prototype.toUTCDate = function() {
    return this.getUTCFullYear() + '-' +
           ('0'+ (this.getUTCMonth()+1)).slice(-2) + '-' +
           ('0'+ this.getUTCDate()).slice(-2);
  }
}

console.log(new Date().toUTCDate());
Komentar (1)

Anda dapat mencapai hal ini dengan hanya memformat semua yang Anda butuhkan di tempat menggunakan moment.format() dan kemudian cukup menambahkan Z tambahan ke string. Anda harus melakukan ini karena Z dalam moment JS dicadangkan untuk output.

var date = moment('2014-08-28').format("YYYY-MM-DDT00:00:00.000") + "Z";

Contoh biola https://jsfiddle.net/2avxxz6q/

Komentar (3)

Saya kira Anda ingin mendapatkan tanggal saat ini dalam ISO 8601 untuk meneruskannya ke API Anda? Mungkin menggunakan pembungkus moment.js untuk JavaScript asli yang disebutkan di sini dapat membantu?

Seperti dalam contoh Anda:

document.write(moment('01/12/2016', 'DD/MM/YYYY', true).toISOString());

Cuplikan:

$(function(){
  var displaysTime = $('#divTime');
  displaysTime.text(moment.utc('27/04/2017', 'DD/MM/YYYY', true).toISOString());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

<div id="divTime">
</div>
Komentar (0)