Arsip: Menghitung Jumlah hari minggu

 
user image
more 19 years ago

grounders

temen2 ada yang tau caranya buat mencari jumlah hari minggu dalam rentang waktu tertentu gak? rentang waktu tersebut qta yang nentuin? mohon bantuannya ya, thanks....
user image
more 19 years ago

cyber_hecker

gue gak tau. di delphi udah menyediakan fungsi itu atau belon :oops: tapi dari pada nganggur, maka iseng-iseng gue bikin fungsi sendiri untuk mendapatkan jumlah hari minggu: fungsi GetSunday :
function TForm1.GetSunday(var vNow, vThen: TDateTime): Integer;
var nSun : Integer;
begin
  if DayOfWeek(vNow) = 1 then
    nSun := 1 else nSun := 0;
  if (DayOfWeek(vThen) > 1) then
    nSun := nSun + 1 else nSun := nSun + 0;
  if DayOfWeek(vThen) > DayOfWeek(vNow) then
  nSun := WeeksBetween(vNow,vThen) + nSun - 1 else
  nSun := WeeksBetween(vNow,vThen) + nSun;
  Result := nSun;
end;
sebagai contoh ku buat sebuah aplikasi sederhana untuk menghitung jumlah hari minggu : kode lengkapnya :
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls;
type
  TForm1 = class(TForm)
    dtpAwal: TDateTimePicker;
    dtpSampai: TDateTimePicker;
    Label1: TLabel;
    Label2: TLabel;
    edWeek: TEdit;
    btnHitung: TBitBtn;
    edHariAwal: TEdit;
    edHariSampai: TEdit;
    edSelisih: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    edHariMinggu: TEdit;
    Label5: TLabel;
    procedure btnHitungClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function GetSunday(var vNow, vThen: TDateTime):Integer;
  end;
var
  Form1: TForm1;
implementation
uses DateUtils;
{$R *.dfm}
function TForm1.GetSunday(var vNow, vThen: TDateTime): Integer;
var nSun : Integer;
begin
  if DayOfWeek(vNow) = 1 then
    nSun := 1 else nSun := 0;
  if (DayOfWeek(vThen) > 1) then
    nSun := nSun + 1 else nSun := nSun + 0;
  if DayOfWeek(vThen) > DayOfWeek(vNow) then
  nSun := WeeksBetween(vNow,vThen) + nSun - 1 else
  nSun := WeeksBetween(vNow,vThen) + nSun;
  Result := nSun;
end;
procedure TForm1.btnHitungClick(Sender: TObject);
const
  sHari : Array[1..7] of String =
    ('Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu');
var
  dNow, dThen : TDateTime;
  nWeek,
  nDay  : Integer;
begin
  dNow := dtpAwal.Date;
  dThen := dtpSampai.Date;
  nDay := DaysBetween(dtpAwal.Date,dtpSampai.Date);
  nWeek := WeeksBetween(dNow,dThen);
  edHariAwal.Text := Format('%s',[sHari[DayOfWeek(dNow)]]);     // nama hari awal
  edHariSampai.Text := Format('%s',[sHari[DayOfWeek(dThen)]]);  // nama hari akhir
  edWeek.Text := Format('%d',[nWeek]);      // jumlah week
  edSelisih.Text := Format('%d',[nDay]);    // selisih hari
  edHariMinggu.Text := Format('%d',[GetSunday(dNow,dThen)]); // jumlah hari minggu
end;
end.
nb. tanggal awal dan tanggal akhir jangan di balik lho. hasilnya pasti salah :D wakakaka oh ya bagi temen-temen yang lain. di tunggu perbaikan dari listing semrawut ku ini wakakak :D :oops:
user image
more 19 years ago

deLogic

bung hecker.. fungsi getsunday nya masih error.. -jika selisih tanggal tepat kelipatan 7 hari, maka jumlah hari minggu lebih banyak 1., contoh: --> jika tanggal awal 13 agt dan tanggal akhir 13 agt, maka jumlah hari minggu = 1 ..??? --> jika tanggal awal 13 agt dan tanggal akhir 20 agt, maka jml hr mg = 2..?? - jika tanggal akhir tepat jatuh di hari minggu, maka jumlah hari berkurang 1, contoh: --> jika tanggal awal 13 agt dan tanggal akhir 21 agt, maka juml hr mg = 1..? coba solusi ini deh:

function TForm1.GetSunday(vNow, vThen: TDateTime): Integer;
var
  nDiffDay  : Integer;
  nSun : Integer;
  dtFirstSunday : tDateTime;
begin
  nDiffDay := DayOfWeek(vNow);
  dtFirstSunday := vNow - nDiffDay + 1;
  if nDiffDay = 1 then
    nSun := 1
  else
    nSun := 0;
  Result := WeeksBetween(dtFirstSunday, vThen) + nSun;
end;
NB: kode diatas juga mengharuskan tanggal akhir lebih besar dari tanggal awal. jadi jangan dibolak balik. Jika Anda ingin fleksibel, misal tanggal akhir lebih kecil dari tanggal awal, maka Anda harus menambahkan rutin pengecekan besar tanggal, bila tanggal akhir lebih kecil maka lakukan pertukaran (swap) tanggal.
user image
more 19 years ago

cyber_hecker

:oops: oh iya........... wakakak :D sori.. sori.. namanya aja baru belajar. jadi logikanya masih berantakan. wakakak :D jadi malu neh. makasih om deLogic. atas perbaikannya. wakakakakak :D = asli !! Try And Error neh =
user image
more 19 years ago

grounders

wah thanks banget atas pencerahannya mas de logic dan juga buat usahanya bung cyber oh ya, bung cyber tu form kok bisa skinnya asik banget c? kalo boleh tau pake komponen apa? gw boleh minta kagak?
user image
more 19 years ago

deLogic

OOT: weks bung cyber bikin aplikasi apa sih..?? kok aku gak liat ya..???
user image
more 19 years ago

cyber_hecker

oh ya, bung cyber tu form kok bisa skinnya asik banget c? kalo boleh tau pake komponen apa? gw boleh minta kagak?
gampang.. gampang.. gue cuma pake vclskin biasa kok. udah versi lawas. :P kapan-kapan akan ku upload ke forum ini wakakak :D
weks bung cyber bikin aplikasi apa sih..?? kok aku gak liat ya..???
wah kayaknya gue gak bikin aplikasi apa-apa deh.. :P alias pengangguran. hanya suka iseng mbikin aplikasi sesuai yang lagi di tanya. itu pun kalo gue bisa. wakakak :D jadi apanya yang mo di liat :oops: ?
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com