Pertanyaan Bagaimana cara memformat tanggal Microsoft JSON?


Saya mengambil crack pertama saya di Ajax dengan jQuery. Saya mendapatkan data saya ke halaman saya, tapi saya mengalami masalah dengan data JSON yang dikembalikan untuk tipe data Date. Pada dasarnya, saya mendapatkan string kembali yang terlihat seperti ini:

/Date(1224043200000)/

Dari seseorang yang benar-benar baru di JSON - Bagaimana saya memformat ini ke format tanggal pendek? Apakah ini harus ditangani di suatu tempat dalam kode jQuery? Saya sudah mencoba jQuery.UI.datepicker menggunakan plugin $.datepicker.formatDate() tanpa berhasil.

FYI: Inilah solusi yang saya dapatkan dengan menggunakan kombinasi jawaban di sini:

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

Solusi ini mendapatkan objek saya dari metode callback dan menampilkan tanggal pada halaman dengan benar menggunakan pustaka format tanggal.


1788


asal


Jawaban:


Eval tidak diperlukan. Ini akan berfungsi dengan baik:

var date = new Date(parseInt(jsonDate.substr(6)));

Fungsi substrem mengeluarkan bagian "/ Tanggal (", dan fungsi parseInt mendapatkan bilangan bulat dan mengabaikan ") /" di bagian akhir. Nomor yang dihasilkan dilewatkan ke konstruktor Tanggal.

EDIT: Saya telah sengaja meninggalkan radix (argumen ke-2 untuk mengurai); Lihat komentar saya di bawah ini. Juga, saya sepenuhnya setuju dengan Komentar Rory: Tanggal ISO-8601 lebih disukai daripada format lama ini - jadi format ini biasanya tidak boleh digunakan untuk pengembangan baru. Lihat yang luar biasa Json.NET perpustakaan untuk alternatif hebat yang mengurutkan tanggal menggunakan format ISO-8601.

Untuk tanggal JSON ISO-8601 yang diformat, cukup masukkan string ke konstruktor Tanggal:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support

1565



Anda dapat menggunakan ini untuk mendapatkan tanggal dari JSON:

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

Dan kemudian Anda bisa menggunakannya Format Tanggal JavaScript skrip (1,2 KB saat diperkecil dan gzip) untuk menampilkannya sesuai keinginan Anda.


115



Bagi mereka yang menggunakan Newtonsoft Json.NET, baca tentang cara melakukannya melalui Native JSON di IE8, Firefox 3.5 plus Json.NET.

Juga dokumentasi tentang mengubah format tanggal yang ditulis oleh Json.NET berguna: Tanggal berseri dengan Json.NET

Bagi mereka yang terlalu malas, berikut langkah cepatnya. Karena JSON memiliki implementasi DateTime yang longgar, Anda harus menggunakan IsoDateTimeConverter(). Perhatikan bahwa sejak Json.NET 4.5 format tanggal default adalah ISO sehingga kode di bawah ini tidak diperlukan.

string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

JSON akan datang sebagai

"fieldName": "2009-04-12T20:44:55"

Akhirnya, beberapa JavaScript untuk mengonversi tanggal ISO menjadi tanggal JavaScript:

function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

Saya menggunakannya seperti ini

$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);

84



Contoh asli:

/Date(1224043200000)/  

tidak mencerminkan format yang digunakan oleh WCF saat mengirim tanggal melalui WCF REST menggunakan serialisasi JSON bawaan. (setidaknya pada .NET 3.5, SP1)

Saya menemukan jawabannya di sini membantu, tetapi sedikit pengeditan untuk regex diperlukan, karena tampak bahwa zona GMT offset sedang ditambahkan ke nomor yang dikembalikan (sejak 1970) di WCF JSON.

Dalam layanan WCF saya memiliki:

[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

ApptVisitLinkInfo didefinisikan secara sederhana:

public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

Ketika "Field2" dikembalikan sebagai Json dari layanan, nilainya adalah:

/Date(1224043200000-0600)/

Perhatikan offset zona waktu termasuk sebagai bagian dari nilai.

Regex yang dimodifikasi:

/\/Date\((.*?)\)\//gi

Ini sedikit lebih bersemangat dan mengambil segala sesuatu di antara para orang tua, bukan hanya nomor pertama. Waktu yang dihasilkan berdosa 1970, ditambah offset zona waktu semua bisa dimasukkan ke dalam eval untuk mendapatkan objek tanggal.

Baris JavaScript yang dihasilkan untuk penggantinya adalah:

replace(/\/Date\((.*?)\)\//gi, "new Date($1)");

57



Jangan ulangi diri Anda - otomatisasi konversi tanggal menggunakan $.parseJSON()

Jawaban atas posting Anda memberikan konversi tanggal manual ke tanggal JavaScript. Saya telah memperpanjang jQuery $.parseJSON() hanya sedikit, sehingga dapat secara otomatis menguraikan tanggal ketika Anda menginstruksikannya. Ini memproses tanggal diformat ASP.NET (/Date(12348721342)/) serta tanggal format ISO (2010-01-01T12.34.56.789Z) yang didukung oleh fungsi JSON asli di browser (dan pustaka seperti json2.js).

Bagaimanapun. Jika Anda tidak ingin mengulangi kode konversi tanggal Anda berulang kali, saya sarankan Anda membaca posting blog ini dan dapatkan kode yang akan membuat hidup Anda sedikit lebih mudah.


53



Jika Anda mengatakan dalam JavaScript,

var thedate = new Date(1224043200000);
alert(thedate);

Anda akan melihat bahwa ini adalah tanggal yang benar, dan Anda dapat menggunakannya di mana saja dalam kode JavaScript dengan kerangka apa pun.


50



Klik di sini untuk memeriksa Demo

JavaScript / jQuery

var = MyDate_String_Value = "/Date(1224043200000)/"
var value = new Date
            (
                 parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
            );
var dat = value.getMonth() +
                         1 +
                       "/" +
           value.getDate() +
                       "/" +
       value.getFullYear();

Hasil - "10/15/2008"


46