Mencari Tanggal Minimum dan Maximum dari Sebuah Array Tanggal di JavaScript


Anggaplah kita memerlukan tanggal minimum dan tanggal maximum dari sebuah array yang element-elementnya berisi tanggal di JavaScript, dan array ini adalah hasil dari query di ColdFusion


Create query dari script ini

<cfset tanggal = QueryNew("TANGGAL")>

<cfset tanggalMulai = Now()>
<cfset tanggalSelesai = DateAdd("d", 6, tanggalMulai)>

<cfloop from="#tanggalMulai#" to="#tanggalSelesai#" index="indexTanggal">
	<cfset QueryAddRow(tanggal)>
	<cfset QuerySetCell(tanggal, "TANGGAL", CreateDate(Year(indexTanggal), Month(indexTanggal), Day(indexTanggal)))>
</cfloop>

<cfdump var="#tanggal#">
query tanggal

query tanggal

Kemudian dari query tanggal ini kita konversi ke dalam bentuk JSON

<script>

// bentuk json dari query tanggal
var jsonTanggal = <cfoutput>#SerializeJSON(tanggal)#;</cfoutput>

</script>

Jika dilihat source html dari halaman tersebut, jsonTanggal memiliki bentuk seperti ini

var jsonTanggal = {"COLUMNS":["TANGGAL"],"DATA":[["September, 01 2010 00:00:00"],["September, 02 2010 00:00:00"],["September, 03 2010 00:00:00"],["September, 04 2010 00:00:00"],["September, 05 2010 00:00:00"],["September, 06 2010 00:00:00"],["September, 07 2010 00:00:00"]]};

jsonTanggal adalah sebuah object. Kita ingin membuat sebuah JavaScript array yang berisikan tanggal-tanggal dari variable itu. Karena September, 01 2010 00:00:00 sampai dengan September, 07 2010 00:00:00 masing-masing berada di array yang berbeda, maka untuk menjadikannya berada di array yang sama, kita dapat menulis scriptnya seperti ini

// create array dari kolom TANGGAL
var tanggal = jsonTanggal.DATA.map(function(value, index, array) {
	return value[0];
});

Di sini kita menggunakan method map, dan mengambil element index ke 0 dari setiap array di jsonTanggal.DATA.

Untuk mencari tanggal minimum dan maximum dari array tanggal, kita menggunakan Array.min dan Array.max dari tulisan John Resig di sini.

// nilai minimum dan maximum dari angka dalam array
// http://ejohn.org/blog/fast-javascript-maxmin/
Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

Karena kedua fungsi ini membutuhkan angka, sedangkan array yang kita punya adalah dalam bentuk Date, maka kita perlu mengkonversinya ke dalam bentuk angka (timestamp).

// ubah ke dalam timestamp
tanggal = tanggal.map(function(value, index, array) {
	return new Date(value).getTime();
});

Dan kita bisa mencari tanggal minimum dan maximum dengan cara seperti ini

// tanggal minimum
var tanggalMin = new Date(Array.min(tanggal));

// tanggal maximum
var tanggalMax = new Date(Array.max(tanggal));

Source komplit

<cfset tanggal = QueryNew("TANGGAL")>

<cfset tanggalMulai = Now()>
<cfset tanggalSelesai = DateAdd("d", 6, tanggalMulai)>

<cfloop from="#tanggalMulai#" to="#tanggalSelesai#" index="indexTanggal">
	<cfset QueryAddRow(tanggal)>
	<cfset QuerySetCell(tanggal, "TANGGAL", CreateDate(Year(indexTanggal), Month(indexTanggal), Day(indexTanggal)))>
</cfloop>

<cfdump var="#tanggal#">

<script>

// bentuk json dari query tanggal
var jsonTanggal = <cfoutput>#SerializeJSON(tanggal)#;</cfoutput>

// create array dari kolom TANGGAL
var tanggal = jsonTanggal.DATA.map(function(value, index, array) {
	return value[0];
});

document.write("<ol>");
tanggal.forEach(function(value, index, array) {
	document.write("<li>" + value + "</li>");
});
document.write("</ol>");

// nilai minimum dan maximum dari angka dalam array
// http://ejohn.org/blog/fast-javascript-maxmin/
Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

// ubah ke dalam timestamp
tanggal = tanggal.map(function(value, index, array) {
	return new Date(value).getTime();
});

document.write("<ol>");
tanggal.forEach(function(value, index, array) {
	document.write("<li>" + value + " = " + new Date(value) + "</li>");
});
document.write("</ol>");

// tanggal minimum
var tanggalMin = new Date(Array.min(tanggal));

document.write("<p>Tanggal Minimum = " + tanggalMin + "</p>")

// tanggal maximum
var tanggalMax = new Date(Array.max(tanggal));

document.write("<p>Tanggal Maximum = " + tanggalMax + "</p>")

</script>
tanggal minimum dan maximum

tanggal minimum dan maximum

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: