ต้องการหา จำนวนวันที่เหลือ โดยนำ date - date แต่ทำไมผลลัพธ์ไม่ได้เป็น จำนวนวัน ทำไมได้เป็นdate(4/2/2554)
ต้องการหา จำนวนวันที่เหลือ
ภาษาที่ใช้เป็น asp.net/vb โดยเป็นการ select data จากฐานข้อมูล มาหลายๆเรคคอร์ด
ตอนนี้โค้ดถ้าพูดสั้นๆคือ "select (ExpireDate - " & Date.Today & ") as AmountDayExpire FROM package" โดย ExpireDate คือฟิลด์ที่อยู่ในฐานข้อมูล ส่วน Date.Today คือฟังก์ชั่นนึงใน asp.net ซึ่งพอโปรแกรมรันแล้วมันจะเห็นเป็นวันที่ปัจจุบันอยู่ใน sql code
ตอนนี้ ExpireDate ที่เก็บอยู่ในฐานข้อมูลจะเป็น 5/2/2554 แต่พอเวลาเรา select expiredate from package มาแสดง มันจะแสดงเป็น 1/2/2554 00:00:00 คือมันจะแสดงเวลามาด้วย (อันนี้ตอนแรกก็เป็นปัญหา แต่ก็เคยถามๆเอาแล้วมีคนบอกให้ตั้งค่า format เอาในโปรแกรม)
ส่วน Date.Today ฟังก์ชั่นนี้มันจะแสดง 2/2/2554 (สมมติวันนี้เป็นวันที่2)
โค้ดอันนี้ "select (ExpireDate - " & Date.Today & ") as AmountDayExpire FROM package" พอรันแล้ว AmountDayExpire มันแสดงเป็น 4/2/2554 23:59:26 วัน ซึ่งมันผิดจากที่คาดการณ์ไว้ คือ มันน่าจะแสดงผลเป็น 4 วัน ถึงจะเป็นแบบที่อยากได้
************************หมายเหตุ โค้ดเต็มๆ ดังนี้***************************************
หน้า .aspx
<HTML>
<HEAD>
<title>ExampleDatalist2</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="Tahoma">
<asp:datalist id="DataList1" runat="server">
<SeparatorTemplate><hr></SeparatorTemplate>
<ItemTemplate>
<TABLE bgcolor="#ffffcc" width="100%">
<TR>
<TD><h3><%#Container.DataItem("Title")%></h3>
</TD>
</TR>
<TR>
<td><TABLE BORDER="1">
<TR>
<TD><b>มูลค่า</b>
<br>
<%#Container.DataItem("Price")%>
</TD>
<TD><b>ส่วนลด</b><br>
<%#Container.DataItem("Discount")%>
</TD>
<TD><b>ประหยัด</b><br>
<%#Container.DataItem("Save")%>
</TD>
</TR>
</TABLE>
</td>
</TR>
<TR>
<TD>ดีลนี้หมดอายุ
<%#DataBinder.Eval(Container.DataItem, "ExpireDate","{0:D}")%>
</TD>
</TR>
<tr>
<td><TABLE WIDTH="100%" CELLSPACING="1" CELLPADDING="1">
<TR>
<TD><font color="#ff0066" style="FONT-WEIGHT: bold">โอกาสพิเศษเหลือ <%#Container.DataItem("AmountDayExpire")%> วัน </font></TD>
<TD align="right"><font color="#00cc00" style="FONT-WEIGHT: bold">ดีลนี้ขายไป
<%#Container.DataItem("AmountSale")%>
</font>
</TD>
</TR>
</TABLE>
</td>
</tr>
<tr>
<td align="right"><a href='ExampleDatalistPassValue.aspx?a=<%#Container.DataItem("PackageId")%>' target="_blank">อ่านต่อ</a></td>
</tr>
</TABLE>
</ItemTemplate>
</asp:datalist></FONT></form>
</body>
</HTML>
***************************************************************************************************************
หน้า .aspx.vb
Imports System.Data
Imports System.Data.OleDb
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim strConnString As String
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
Server.MapPath("database/prosogo.mdb") & ";"
objConn = New OleDbConnection(strConnString)
objConn.Open()
BindData()
objConn.Close()
objConn = Nothing
End Sub
Sub BindData()
Dim strSQL As String
strSQL = "SELECT PackageId,Title,Price,Discount,Save,ExpireDate,AmountSale,(ExpireDate - " & Date.Today & ") as AmountDayExpire FROM package"
Dim dtReader As OleDbDataReader
objCmd = New OleDbCommand(strSQL, objConn)
dtReader = objCmd.ExecuteReader()
'*** BindData to DataList ***'
DataList1.DataSource = dtReader
DataList1.DataBind()
dtReader.Close()
dtReader = Nothing
End SubTag : .NET, Ms Access, Web (ASP.NET), VS 2003 (.NET 1.1)
Date :
2011-02-03 01:15:24
By :
หมวย
View :
2036
Reply :
2
ผมใช้วิธีเอาวันที่ getdate - expiredate นะครับ ผมใช้กับโปรแกรมที่บริษัทใช้งานจริงครับ
datediff(day,getdate(),ExpireDate) จะได้จำนวนวันมาครับ
exam::: select datediff(day,getdate(),'12/31/2011')
==>>> 331 day
mail มาถามเพิ่มเติมได้ครับ
Date :
2011-02-03 08:42:45
By :
suphat.p
ขอบคุณค่ะ ที่ชี้ช่องทางให้
Date :
2011-02-05 18:10:50
By :
หมวย
Load balance : Server 03