PDA

View Full Version : سوال: تبدیل تاریخ میلادی به شمسی



hastiam
سه شنبه 15 بهمن 1392, 14:56 عصر
سلام دوستان
من چطوری میتونم تاریخی که تو دیتابیس از نوع datetime هست رو به تاریخ شمسی تبدیل کنم. تو اینترنت خیلی گشتم ولی همشون تاریخ همون روز رو به شمسی تبدیل کردند.
یعنی از دستور زیر استفاده کردند :


var now = new Date();
gregorian_to_jalali([now.getFullYear(), now.getMonth() + 1, now.getDate()]);

در حالی که من میخوام به جای new Date() یه تاریخی که تو دیتابیس هست رو بخونم و به صورت جاوااسکریپتی به شمسی تبدیل کنم و اون رو نشون بدم.
تاریخی که من از دیتابیس میخونم،سمت کلاینت به صورت Date(1372572634197) نشون میده نمیدونم چرا این شکلیه !!!!. وقتی میخوام از همین دستور بالا برای تاریخهای دیگه استفاده کنم نتیجه درستی رو نشون نمیده.

shahrzad87
سه شنبه 15 بهمن 1392, 15:02 عصر
سلام

وقتی آخر تاریخ ()getTime. بنویسید تاریخ رو به صورت میلی ثانیه محاسبه می کنه. 1372572634197 هم یک تاریخ هست که تبدیل به میلی ثانیه شده. شما می تونید به new Date() تاریخ دیتابیس رو به صورت ورودی بدید.

hastiam
سه شنبه 15 بهمن 1392, 15:32 عصر
سلام

وقتی آخر تاریخ ()getTime. بنویسید تاریخ رو به صورت میلی ثانیه محاسبه می کنه. 1372572634197 هم یک تاریخ هست که تبدیل به میلی ثانیه شده. شما می تونید به new Date() تاریخ دیتابیس رو به صورت ورودی بدید.

با تشکر از پاسختون
من سمت سرور از دستور زیر استفاده کردم :


var getList = from i in context.Goods select new { i.Created };

و سمت کلاینت گفتم به صورت ajax این لیست رو بخون و در نهایت با دستور item.Created ، تاریخ رو نمایش بده.
و حالا اگه از دستور زیر استفاده کنم هیچ اطلاعاتی رو نشون نمیده.


var now = item.Created;
gregorian_to_jalali([now.getFullYear(), now.getMonth() + 1, now.getDate()]);

cups_of_java
سه شنبه 15 بهمن 1392, 18:35 عصر
item.Created محتویاتش چه شکلیه در واقع؟

hastiam
چهارشنبه 16 بهمن 1392, 08:12 صبح
item.Created محتویاتش چه شکلیه در واقع؟
سمت سرور این مقدار به صورت {12/08/2013 05:31:14 ب.ظ} است ولی سمت کلاینت یک alert گذاشتم دیدم که به صورت میلی ثانیه نشون میده. یعنی : (Date(1372572634197
من میتونم سمت سرور تاریخ میلادی رو به شمسی تبدیل کنم و همون رو نشون بدم اما وقتی تعداد رکوردها بیشتر از 1000 تا باشه سرعت لود اطلاعات خیلی خیلی کند میشه به همین دلیل میخوام کلاینتی این تبدیل انجام بشه.
لطفا تا جایی که امکانش هست راهنماییم کنید. :خجالت::خجالت:
ممنون

shahrzad87
چهارشنبه 16 بهمن 1392, 11:41 صبح
اگر item.Created برابر با 1372572634197 هست. این کد باید جواب بده:

var now = new Date(item.Created);
gregorian_to_jalali([now.getFullYear(), now.getMonth() + 1, now.getDate()]);

cups_of_java
چهارشنبه 16 بهمن 1392, 11:51 صبح
تو کلاینت اون عدد رو همونطوری که نوشتی با new Date می تونی به تاریخ میلادی تبدیل کنی. بعد اون شی date رو الرت کنی ببینی درست ایجاد شده یا نه.
وقتی شی ات تاریخ درست رو نشون داد حالا میتونی به همون تابع مبدل شمسیت روز و ماه و سالش رو ارسال کنی.
نمونه کد مبدل هم اینجا هست (https://gist.github.com/behrad/5799941#file-jalali-js)

hastiam
چهارشنبه 16 بهمن 1392, 14:09 عصر
اگر item.Created برابر با 1372572634197 هست. این کد باید جواب بده:

var now = new Date(item.Created);
gregorian_to_jalali([now.getFullYear(), now.getMonth() + 1, now.getDate()]);

واقعا ممنوم از راهنماییتون، وقتی عدد رو به جای item.Created قرار دادم دیدم تابع درست اجرا میشه و یک تاریخ درست رو نشون میده ولی مشکل اینجاست که item.Created دقیقا برابر با یک عدد نیست، بلکه به صورت زیر است :


item.Created=/Date(1372572634197)/

آیا امکانش هست که کلمه Date و پرانتزی که اضافه میشه رو برداشت؟

cups_of_java
چهارشنبه 16 بهمن 1392, 14:19 عصر
من متوجه نمیشم. شما Created رو سمت سرور درست میکنید؟ این /Date(1372572634197)/ چیه دیگه؟
اگه کد جاوا اسکریپته باید این شکلی باشه: new Date(121212121313) اگر نیست سمت سرور با کد درستی اون رو بزارید توی یه متغیر که وقتی توی جاوا اسکریپت چاپش میکنید عدد رو ببینید بعد میتونید بنویسید:
new Date( item.Created )

hastiam
چهارشنبه 16 بهمن 1392, 16:26 عصر
با دستور زیر اون مقدار رو به عدد تبدیل کردم و مشکلم حل شد.


var date = parseInt((item.Created).replace("/Date(", "").replace(")/", ""));
var now = new Date(date);