حول استعمال التاريخ
#1
مثلا عندي هذا التاريخ 01/01/2012
كيف احوله برمجيا بهذه الطريقة في الاول من شهر جانفي عام الفين و اثنى عشر
الرد
#2
PHP كود :
function dayoftheweek(TheDate: TDateTime): string;
var
days: array[1..7] of string;
begin
days
[1] := 'الاحد';
days[2] := 'الاثنين';
days[3] := 'الثلاثاء';
days[4] := 'الاربعاء';
days[5] := 'الخميس';
days[6] := 'الجمعة';
days[7] := 'السبت';
Result := days[DayOfWeek(TheDate)];
end;



function 
_month(TheDate: TDateTime): string;
var
ss: array[1..12] of string;
begin
  ss
[ 1] := 'مُحَرَمْ';
  
ss[ 2] := 'صَفَر';
  
ss[ 3] := 'رَبِيْعٌ الأَوَّلُّ';
  
ss[ 4] := 'رَبِيْعٌ الآخر';
  
ss[ 5] := 'جُمَادَى الأُولى';
  
ss[ 6] := 'جُمَادَى الآخِرَةُ';
  
ss[ 7] := 'رَجَب';
  
ss[ 8] := 'شَعْبَان';
  
ss[ 9] := 'رَمَضَان';
  
ss[10] := 'شَوَّال';
  
ss[11] := 'ذُو القِعْدَةِ';
  
ss[12] := 'ذُو الحِجَّةِ';
 
Result := ss[MonthOfTheYear(TheDate)];
end; 
function 2 خاطئة غير الاشهر الهجرية بالميلاديو وستعمل جيدا
اما الاعوام فلا اعلم
الرد
#3
السلام عليكم...

* أضف الوحدة StrUtils إلى جملة uses.

ضع الكود التالي في القسم implementation :

كود :
// نوع لتحديد طريقة تسمية الأشهر type TMonthNameKind = (mnkSystem, mnkTranslatedEn, mnkTranslatedFr, mnkOldArabic, mnkHijri); // دالة ****** لاختيار إحدى قيمتين حسب الشرط function IIf(ACondition: Boolean; ATruePart, AFalsePart: string): string; begin if ACondition then Result := ATruePart else Result := AFalsePart; end; // دالة لتحويل رقم السنة إلى كلمة function ReadYear(AYear: Word; UseYaa: Boolean): string; const ONES: array[1..10] of string = ('واحد', 'اثنان', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة', 'عشرة'); TENS: array[2..9] of string = ('عشرون', 'ثلاثون', 'أربعون', 'خمسون', 'ستون', 'سبعون', 'ثمانون', 'تسعون'); HUNDREDS: array[1..9] of string = ('مائة', 'مائتان', 'ثلاثمائة', 'أربعمائة', 'خمسمائة', 'ستمائة', 'سبعمائة', 'ثمانمائة', 'تسعمائة'); var InnerNumber, Remainder, Integral: Word; begin InnerNumber := AYear; if (InnerNumber >= 1) and (InnerNumber <= 99) then begin case InnerNumber of 1, 3..10: Result := ONES[InnerNumber]; 2: Result := IIf(UseYaa, 'اثنين', 'اثنان'); 11: Result := 'أحد عشر'; 12: Result := IIf(UseYaa, 'اثني عشر', 'اثنا عشر'); 13..19: begin Remainder := InnerNumber mod 10; Result := ONES[Remainder] + ' عشر'; end; 20..99: begin Remainder := InnerNumber mod 10; Integral := InnerNumber div 10; Result := IIf(UseYaa, StuffString(TENS[Integral], Length(TENS[Integral]) - 1, 1, 'ي'), TENS[Integral]); if Remainder = 2 then Result := IIf(UseYaa, 'اثنين', 'اثنان') + ' و ' + Result else if Remainder <> 0 then Result := ONES[Remainder] + ' و ' + Result; end; end; end else if (InnerNumber >= 100) and (InnerNumber <= 999) then begin Remainder := InnerNumber mod 100; Integral := InnerNumber div 100; if Integral = 2 then Result := IIf(UseYaa, 'مائتين', 'مائتان') else Result := HUNDREDS[Integral]; if Remainder <> 0 then begin InnerNumber := Remainder; Result := Result + ' و ' + ReadYear(InnerNumber, UseYaa); end; end else if (InnerNumber >= 1000) and (InnerNumber <= 9999) then begin Remainder := InnerNumber mod 1000; Integral := InnerNumber div 1000; case Integral of 1: Result := 'ألف'; 2: Result := IIf(UseYaa, 'ألفين', 'ألفان'); else Result := ONES[Integral] + ' آلاف'; end; if Remainder <> 0 then begin InnerNumber := Remainder; Result := Result + ' و ' + ReadYear(InnerNumber, UseYaa); end; end; end; // دالة لتحويل رقم الشهر إلى كلمة function ReadMonth(AMonth: Word; AMonthNaming: TMonthNameKind): string; const MonthsEn: array[1..12] of string = ('يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'); MonthsFr: array[1..12] of string = ('جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويليه', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'); MonthsAr: array[1..12] of string = ('كانون الثاني', 'شباط', 'آذار', 'بيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'); MonthsHijri: array[1..12] of string = ('محرم', 'صفر', 'ربيع الأول', 'ربيع الثاني', 'جمادى الأولى', 'جمادى الثانية', 'رجب', 'شعبان', 'رمضان', 'شوال', 'ذي القعدة', 'ذي الحجة'); begin case AMonthNaming of mnkSystem: Result := LongMonthNames[AMonth]; mnkTranslatedEn: Result := MonthsEn[AMonth]; mnkTranslatedFr: Result := MonthsFr[AMonth]; mnkOldArabic: Result := MonthsAr[AMonth]; mnkHijri: Result := MonthsHijri[AMonth]; end; end; // دالة لتحويل رقم اليوم إلى كلمة function ReadDay(ADay: Word; UseYaa: Boolean): string; const ONES: array[1..10] of string = ('الحادي', 'الثاني', 'الثالث', 'الرابع', 'الخامس', 'السادس', 'السابع', 'الثامن', 'التاسع', 'العاشر'); begin case ADay of 1: Result := 'الأول'; 2..10: Result := ONES[ADay]; 11..19: Result := ONES[ADay mod 10] + ' عشر'; 20: Result := IIf(UseYaa, 'العشرين', 'العشرون'); 21..29: Result := ONES[ADay mod 10] + ' و ' + IIf(UseYaa, 'العشرين', 'العشرون'); 30: Result := IIf(UseYaa, 'الثلاثين', 'الثلاثون'); 31: Result := IIf(UseYaa, 'الحادي و الثلاثين', 'الحادي و الثلاثون'); end; end; // الدالة الأساسية لتحويل تاريخ إلى نص لفظي function ReadDate(ADate: TDate; AMonthNaming: TMonthNameKind = TMonthNameKind.mnkSystem; UseYaa: Boolean = False; UseAam: Boolean = False): string; var Y, M, D: Word; AYearWord: string; begin if UseAam then AYearWord := ' عام ' else AYearWord := ' سنة '; DecodeDate(ADate, Y, M, D); Result := ReadDay(D, UseYaa) + ' من شهر ' + ReadMonth(M, AMonthNaming) + AYearWord + ReadYear(Y, UseYaa); end;

* بعض التوضيح للكود:

= الدوال الأربع الأولى (IIf و ReadYear و ReadMonth و ReadDay) هي دوال ****** للحصول على جزء من التاريخ بالكلمات (طبعاً باستثناء الدالة IIf).
= البارامتر UseYaa (نوعه Boolean) في أي دالة يحدد استعمال حرف الياء بدل الآلف أو الواو (مثلاً اثنين بدل اثنان، و خمسين بدل خمسون).
= النوع TMonthNameKind لتحديد نوع الأشهر المستخدمة، و قيمه كالتالي:
[INDENT]mnkSystem: استعمال أسماء الأشهر حسب إعدادات النظام Windows.
mnkTranslatedEn: الأسماء المعربة من الإنجليزية (يناير، فبراير، مارس، ...).
mnkTranslatedFr: الأسماء المعربة من الفرنسية (جانفي، فيفري، مارس، ...).
mnkOldArabic: الأسماء العربية القديمة (كانون الثاني، شباط، آذار، ...).
mnkHijri: الأسماء الهجرية (محرم، صفر، ربيع الأول، ...).[/INDENT]

= البارامتر UseYaa في الدالة الأساسية ReadDate بارامتر اختياري، و قيمته الافتراضية هي False و التي تعني استعمال الألف و الواو، و ليس الياء.
= البارامتر UseAam في الدالة الأساسية بارامتر اختياري، و يحدد استخدام كلمة سنة أو عام. قيمته الافتراضية هي False و تعني استعمال كلمة سنة.

*** مثال:
كود :
procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := ReadDate(DateTimePicker1.Date, mnkTranslatedFr); end;

ملاحظة أخيرة: إذا أردت استعمال الدالة ReadDate في وحدات برمجية (Units) أخرى فضع لها تصريحاً في القسم interface (قبل كلمة implementation):
كود :
function ReadDate(ADate: TDate; AMonthNaming: TMonthNameKind = TMonthNameKind.mnkSystem; UseYaa: Boolean = False; UseAam: Boolean = False): string;

نرجو الاستفادة و السلام.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم