View Full Version : ارشیو هفتگی
hamidafs
سه شنبه 11 اردیبهشت 1386, 10:20 صبح
با سلام خدمت دوستان
می خوام آرشیو هفتگی به صورت زیر داشته باشم ولی نتیجه قابل توجهی نگرفتم.من نتونستم یک تقویم فارسی بنویسم و روی هر کدوم از روز هاش کلیک کنم و از دیتابیس بیرون بکشم مجبورا با یک dll تاریخ فارسی رو برمی گردونم و البته اینکه سه تا فیلد روز و ماه و سال جداگانه موقع ورود در بانک ذخیره می کنم (البته با2003 asp.netوvb.net کار می کنم)
و کلا آرشیو من می خوام به صورت زیر باشه.
...
هفته اول فروردین
هفته دوم فروردین
.
.
هفته دوم اردیبهشت
طریقه کا رمن توسط فیلد day1 که تاریخ روز در اون قرار می گیره و ماه هم در mon1 . میام هفته به هفته کوئری رو اجرا می کنم و در یک hyperlink نام هفته ها رو در اون قرار می دم ولی باید 30 تا 40 تا پروسیجر برای این کار استفاده کنم که و در page_load فراخانی کنم
str = "Select id,date1,time1,day1,mon1 From table where (day1 BETWEEN 1 aND 7) and mon1='" & i & "' Order By Id Desc"
(Dim DataAdapter As New SqlDataAdapter( str, Connection
Dim ds As New DataSet
()Connection.Open
("DataAdapter.Fill(ds, "table
("DataGrid1.DataSource = ds.Tables("table
()ataGrid1.DataBind
()Connection.Close
مچکر از راهنماییتون.
raravaice
سه شنبه 11 اردیبهشت 1386, 10:48 صبح
صورت مسئلت زیاد واضح نیست.
آیا شما روزها رو به صورت ماهیانه ذخیره میکنی یا 7 روز 7 روز؟
در کل یه کم واضح تر بگو ببینم چی به دردت میخوره برات بفرستم؟
hamidafs
سه شنبه 11 اردیبهشت 1386, 12:36 عصر
خیلی مچکر
من می خوام یک آرشیو هفتگی در وب لاگ قرار بدم .
کاربران موقعی که موضوع خودشون رو وارد می کنند زمان و تاریخ موضوعات همراه با خود موضوع در دیتابیس ذخیره می شه.
و مثلا امروز 11/2/86 است موضوعات قبلی رو در یک hyperlink به صورت زیر در صفحه اول قرار بدم:
1تا 7 فروردین select-----> هفته اول فروردین
15تا 21 فروردین -----> هفته دوم فروردین
...
7 تا 14 اردیبهشت ----.> هفته دوم اردیبهشت
و بعد از اینکه روی هر لینک (مثلا هفته دوم فروردین از تاریخ 15/2/1386 تا 21/2/1386 ) کلیک کردم اطلاعات مربوط به موضوعات وارد شده رو در اون تاریخ ها select کنه .
raravaice
سه شنبه 11 اردیبهشت 1386, 13:13 عصر
اگه این لینها شامل تمام روزهای ماه میشه شما دیگه لازم نیست از بانک لینهاتو تشکیل بدی تاریخ ارسال اولین مقالتو بگیر بعد از تاریخ الان کمش کن عددی که به دست میاد رو بخش بر 7 کن و عدد به دست اومده میشه تعداد هفته های آرشیو حالا این عدد رو بنداز توی یه حلقه for که از 0 شروع میکنه میاد جلو بعد از طریق الحاق رشته ها لینهاتو تولید کن
البته چو تاریخ شمسی رو توی database ذخیره میکنی کارت سخت میشه شما تاریخ میلادی رو ذخیره کن تو دیتابیس وقتی میخوای بخونیش تبدیل به شمسیش کن تا بتونی از توابع دات نت هم استفاده کنی
مثلا
Dim a As Date
Dim b As Date
a.Subtract(b)=تفاوت بین این دو تاریخ
یا add اضافه کردن یه تاریخ به دیگری
و اگر هم خواستی بانک اطلاعاتیت رو زیاد توی حلقه نزاری کل اطلاعاتت رو بزار توی dataset بعد dataset رو بزار توی for مقایست رو اونجا انجام بده
در ضمن میتونی با دستور
distinct توی دستورات sql رکوردهای تکراری رو پاک کنی
مثل
select distinct columname from tabel
اینایی که گفتم سرنخهای کارته چون برنامه ای که میخوای یه کم سنگینه و صورت مسئلت هم واضح واضح نیست ولی فکر کنم موارد بالا کارتو راه بندازه
بازم اگه سئوالی داشتی بگو
در ضمن برای تبدیل تاریخ میتونی از فایل زیر استفاده کنی که سورس هست dll رو بنداز دور
Module change_date
Function ChangeToShamsi(ByVal DateParam As String) As String
Dim m, d, y As String
m = CInt(Left(DateParam, InStr(DateParam, "/") - 1))
d = CInt(Mid(DateParam, InStr(DateParam, "/") + 1, InStrRev(DateParam, "/") - InStr(DateParam, "/") - 1))
y = CInt(Mid(DateParam, InStrRev(DateParam, "/") + 1))
If y = 0 Then y = 2000
If y < 1000 Then y = y + 1900
Dim temp As String
If y = 2000 Then
If m > 2 Then
temp = DateSerial(y, m, d)
temp = temp + 1
y = Year(temp)
m = Month(temp)
d = Day(temp)
End If
End If
'*******************
If m < 3 Or (m = 3 And d < 21) Then
y = y - 622
Else
y = y - 621
End If
Select Case m
Case 1
If d < 21 Then
m = 10 : d = d + 10
Else
m = 11 : d = d - 20
End If
Case 2
If d < 20 Then
m = 11 : d = d + 11
Else
m = 12 : d = d - 19
End If
Case 3
If d < 21 Then
m = 12 : d = d + 9
Else
m = 1 : d = d - 20
End If
Case 4
If d < 21 Then
m = 1 : d = d + 11
Else
m = 2 : d = d - 20
End If
Case 5, 6
If d < 22 Then
m = m - 3 : d = d + 10
Else
m = m - 2 : d = d - 21
End If
Case 7, 8, 9
If d < 23 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 22
End If
Case 10
If d < 23 Then
m = 7 : d = d + 8
Else
m = 8 : d = d - 22
End If
Case 11, 12
If d < 22 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 21
End If
End Select
Return Trim(y) & "/" & Trim(m) & "/" & Trim(d)
End Function
Function ChangeToMiladi(ByVal DateParam) As String
DateParam = Trim(DateParam)
Dim y, m, d As Integer
y = CInt(Left(DateParam, InStr(DateParam, "/") - 1))
m = CInt(Mid(DateParam, InStr(DateParam, "/") + 1, InStrRev(DateParam, "/") - InStr(DateParam, "/") - 1))
d = CInt(Mid(DateParam, InStrRev(DateParam, "/") + 1))
If y < 1300 Then y = y + 1300
'******************* Leap year
If y = 1378 Then
If m = 12 And d = 10 Then
y = 2000 : m = 2 : d = 29 : Exit Function
End If
If m = 12 And d > 10 Then
d = d - 1
End If
ElseIf y = 1379 Then
d = d - 1
If d = 0 Then
m = m - 1
If m > 0 And m < 7 Then d = 31
If m > 6 Then d = 30
If m = 0 Then
d = 29
m = 12
y = y - 1
End If
End If
End If
'*******************
If m < 10 Or (m = 10 And d < 11) Then
y = y + 621
Else
y = y + 622
End If
Select Case m
Case 1
If d < 12 Then
m = 3 : d = d + 20
Else
m = 4 : d = d - 11
End If
Case 2
If d < 11 Then
m = 4 : d = d + 20
Else
m = 5 : d = d - 10
End If
Case 3
If d < 11 Then
m = 5 : d = d + 21
Else
m = 6 : d = d - 10
End If
Case 4
If d < 10 Then
m = 6 : d = d + 21
Else
m = 7 : d = d - 9
End If
Case 5, 6, 8
If d < 10 Then
m = m + 2 : d = d + 22
Else
m = m + 3 : d = d - 9
End If
Case 7
If d < 9 Then
m = 9 : d = d + 22
Else
m = 10 : d = d - 8
End If
Case 9
If d < 10 Then
m = 11 : d = d + 21
Else
m = 12 : d = d - 9
End If
Case 10
If d < 11 Then
m = 12 : d = d + 21
Else
m = 1 : d = d - 10
End If
Case 11
If d < 12 Then
m = 1 : d = d + 20
Else
m = 2 : d = d - 11
End If
Case 12
If d < 10 Then
m = 2 : d = d + 19
Else
m = 3 : d = d - 9
End If
End Select
Return CStr(DateSerial(y, m, d))
End Function
End Module
hamidafs
سه شنبه 11 اردیبهشت 1386, 13:45 عصر
مچکر از پاسختون
تاریخ ارسال اولین مقالتو بگیر بعد از تاریخ الان کمش کن عددی که به دست میاد رو بخش بر 7 کن و عدد به دست اومده میشه تعداد هفته های آرشیو حالا این عدد رو بنداز توی یه حلقه for که از 0 شروع میکنه میاد جلو بعد از طریق الحاق رشته ها لینهاتو تولید کن
من متاسفانه کامل متوجه نشدم .اینکار که فرمودید دقیقا آرشیو به صورت هفتگی رو انجام نمی ده.(مثلا 5/1/1386 تا 11/2/86 )
اگر کد یا سایتی در این مورد سراغ دارید بگید مچکر می شم.
raravaice
سه شنبه 11 اردیبهشت 1386, 14:01 عصر
برای همین میگم از تاریخ میلادی استفاده کنی راحت تری چون اونجا میتونی تفاوت بین 2 تا تاریخ رو در بیاری با دستور Subtract زیر مجموعه کلاس date
جایی کد سراغ ندارم من فقط از روی صورت مسئله راه حل هارو گفتم
ولی توی codeproject.com سرچ کن شاید به نتیجه برسی
hamhik
سه شنبه 11 اردیبهشت 1386, 22:22 عصر
شما می تونید برای داشتن یک تقویم فارسی به لینک زیر برید
http://hoomb.dnsalias.com/index.php?page=howto
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.