Nate_LR
asked on
Trouble with Date formatting in Sql Server 2008, ASP.net, and then Javascript
I'm writing an Asp.net in C# application that retrieves data from Sql Server 2008 and converts it to JSON so it can be placed on a Google Map. Trying to figure out the proper way to handle date formatting is driving me crazy.
In Sql Server, the date column is an nvarchar (and there is nothing I can do about that). Sometimes this column is like 18-OCT-10 17:36, 4/8/2009 11:34:00 AM, 3/3/11, or is just null or blank. For testing I'm retrieving rows that are 6/15/14. If I don't do any CASTS or CONVERTS with t-sql and bring it into my asp.net application like this...
In the JSON output the date looks like this - "6/15/14", but when I use javascript....
And then updating my asp.net code to .....
In my t-sql I've tried using CONVERT...
In Sql Server, the date column is an nvarchar (and there is nothing I can do about that). Sometimes this column is like 18-OCT-10 17:36, 4/8/2009 11:34:00 AM, 3/3/11, or is just null or blank. For testing I'm retrieving rows that are 6/15/14. If I don't do any CASTS or CONVERTS with t-sql and bring it into my asp.net application like this...
dsGetFieldPoints.SelectParameters["trackID"].DefaultValue = trkID;
var fieldPts = dsGetFieldPoints.Select(DataSourceSelectArguments.Empty) as DataView;
var fieldPtMarkers = new List<FieldPoint>();
foreach (DataRowView pt in fieldPts)
{
FieldPoint fp = new FieldPoint();
fp.locDate = (string)pt["locDate"];
fieldPtMarkers.Add(fp);
}
JavaScriptSerializer js = new JavaScriptSerializer();
var fieldPtsJson = js.Serialize(fieldPtMarkers);
var fieldPtsJsonFinal = "{\"fieldPoints\": " + fieldPtsJson + "}";
ClientScript.RegisterStartupScript(this.GetType(), "Google Maps Initialization and Add Pts",
string.Format("initializeMap({0}, {1});", photosJson, fieldPtsJsonFinal), true);
In the JSON output the date looks like this - "6/15/14", but when I use javascript....
var fDate = new Date(fMarker.locDate);
fDate.toDateString()
I get this Mon 6/14/1914. So I'm using a With clause in my t-sql statement and I try this....With fieldPts AS
(SELECT
CAST(ISNULL(fp1.Loc_Date, '') AS DATE) AS locDate....)
SELECT
CAST(fp.locDate AS NVARCHAR) AS locDate....
In the JSON output the date looks like this "2014-06-15", but when I use the javascript it looks like this Sat 6/14/2014. So I try not converting it back to nvarchar....With fieldPts AS
(SELECT
CAST(ISNULL(fp1.Loc_Date, '') AS DATE) AS locDate....)
SELECT
fp.locDate....
And then updating my asp.net code to .....
fp.locDate = (DateTime)pt["locDate"];
the JSON output looks like this "\/Date(1402808400000)\/" and the javascript produces undefined Invalid Date.In my t-sql I've tried using CONVERT...
convert(date, CAST(ISNULL(fp1.Loc_Date, '') AS DATE), 112) AS locDate
but it doesn't seem to work since I always get the same format of 2014-06-15. What can I do now? Thanks
ASKER
Sammy I tried this... T-sql
The other thing I can't figure out is if I change the recommendation you gave to...
With fieldPts AS
(SELECT
convert(char(10),fp1.Loc_Date,101) AS locDate,....)
SELECT
fp.locDate....
Asp.netfp.locDate = (string)pt["locDate"];
the date in the JSON output is "6/15/14 " but when I use the javascript...var fDate = new Date(fMarker.locDate);
fDate.toDateString()
I get this Mon Jun 15 1914. The other thing I can't figure out is if I change the recommendation you gave to...
convert(char(10),fp1.Loc_Date,102) AS locDate,
it should give me 2014.06.15 but when I run the stored procedure I still get 6/15/14.
When you use my recommendation, you should get 6/15/2014.
First, what is the data type of your date?
Second, what format are you looking for?
Ok, I read again and you said nvarchar but what format do you want?
First, what is the data type of your date?
Second, what format are you looking for?
Ok, I read again and you said nvarchar but what format do you want?
ASKER
The data type is nvarchar. I'd like to convert it to date somewhere, but that might prove difficult with all the varieties of date formats in that column (18-OCT-10 17:36, 4/8/2009 11:34:00 AM, 3/3/11, or is just null or blank).
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
You had an extra 101 in your solution, but I tried this...
convert(varchar,cast(fp1.Loc_Date as date),101) AS locDate
And it worked. Thanks sammy!
I am glad you caught. That was a typo and even happier that it worked for you.
Open in new window
See if this is any help to you.