जावास्क्रिप्ट तिथि के लिए दिनांक समय


98

Stackoverflow पर एक और जवाब से जावास्क्रिप्ट दिनांक से .net DateTime के लिए एक रूपांतरण है:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);

लेकिन रिवर्स कैसे करें? जावास्क्रिप्ट के लिए दिनांक समय?


इस तरह के प्रश्नों में, जो स्पष्ट रूप से संबंधित हैं, आपको यह निर्दिष्ट करना चाहिए कि आप कहां रूपांतरण कर रहे हैं, और यह देखते हुए कि JSON में दिनांक क्रमांकन के लिए कोई मानक नहीं है और यह संभव है कि आप MS दिनांक के साथ काम कर रहे हैं जैसे / दिनांक (02020202) ) / के रूप में अच्छी तरह से स्पष्ट है कि सुनिश्चित करें। सौभाग्य
आकाश सैंडर्स

2
आपको उस उत्तर को लिंक करना चाहिए जिसका आप उल्लेख कर रहे हैं
cdmckay

जवाबों:


116

प्रयत्न:

return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds

संपादित करें: सच्चा यूटीसी बेहतर है, लेकिन फिर हमें सुसंगत होने की आवश्यकता है

return DateTime.UtcNow
               .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
               .TotalMilliseconds;

हालांकि, दूसरे विचारों पर, इससे कोई फर्क नहीं पड़ता, क्योंकि दोनों तिथियां एक ही समय क्षेत्र में हैं।


5
आप दिनांक समय के बजाय DateTime.UtcNow का उपयोग करना चाह सकते हैं। अब
मैट डियरिंग

2
अपने दूसरे विचारों के बारे में: यह संक्रमण के दौरान या दिन के उजाले की बचत समय से मायने रखता है (मुझे हमेशा यह याद रखना है कि वास्तव में कौन सा कठिन है :)। संक्रमण के दौरान 2:00 से 3:00 बजे का समय दो बार दोहराया जाता है। इसका मतलब यह है कि एक घंटे के दौरान जावास्क्रिप्ट तिथि एक घंटे से बंद हो जाएगी। UTC के पास DLS नहीं है, इसलिए इसमें वह समस्या नहीं है।
सेबेस्टियन एम

मेरे पास यहाँ एक ही कोड है लेकिन यह जावास्क्रिप्ट तिथि में 5:30 का अंतर करता है जबकि C # दिनांक ठीक काम करता है।
जेनिश ज़िनज़ुवदिया 13

44

जावास्क्रिप्ट तिथि निर्माणकर्ता यूनिक्स युग (1 जनवरी 1970 00:00:00 यूटीसी) के बाद से मिलीसेकंड की संख्या को स्वीकार करता है। यहां C # एक्सटेंशन विधि दी गई है जो .net DateTime ऑब्जेक्ट को जावास्क्रिप्ट दिनांक में परिवर्तित करती है:

public static class DateTimeJavaScript
{
   private static readonly long DatetimeMinTimeTicks =
      (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;

   public static long ToJavaScriptMilliseconds(this DateTime dt)
   {
      return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 10000);
   }
}

जावास्क्रिप्ट उपयोग:

var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>);
alert(dt);

C # उपयोग लंबी तिथि = DateTimeJavaScript.ToJavaScriptMilliseconds (DateTime); जावास्क्रिप्ट में जांच करें (Google Chrome में F12 दबाएं और कंसोल पर जाएं) var date = new Date (long); console.log (date.toString ());
गोनें ०

24

आप अपने एक्शन में इसे आज़मा सकते हैं:

return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");

और यह आपकी अजाक्स की सफलता में है:

success: function (resultDateString) {
    var date = new Date(resultDateString);
}

या यह आपके विचार में: (जावास्क्रिप्ट प्लस सी #)

var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")');

1
समझने में आसान और त्वरित
FindOutIslamNow

मेरे लिए सबसे अच्छा जवाब
नवेद


11

यह काम कर जाना चाहिए:

date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds

4

मुझे पता है कि यह थोड़ा देर से है, लेकिन यहाँ समाधान के लिए मुझे तारीखों को संभालने के लिए आना होगा जब आप समय-सीमा को स्वतंत्र करना चाहते हैं। अनिवार्य रूप से इसमें यूटीसी को सब कुछ परिवर्तित करना शामिल है।

जावास्क्रिप्ट से सर्वर तक :

हटाए गए समयक्षेत्र ऑफसेट के साथ युगों के मूल्यों के रूप में तारीखें भेजें।

var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
  url: '/target',
  params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});

सर्वर तब दिनांक युग के रूप में 1420070400000 प्राप्त करता है।

सर्वर साइड पर, उस युग मान को एक डेटाइम ऑब्जेक्ट में कनवर्ट करें:

DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);

इस बिंदु पर तारीख उपयोगकर्ता द्वारा प्रदान की गई तारीख / समय है क्योंकि उन्होंने इसे प्रदान किया है। प्रभावी रूप से यह यूटीसी है।

दूसरे रास्ते पर जा रहे हैं :

जब सर्वर डेटाबेस से डेटा खींचता है, संभवतः यूटीसी में, एक युग के रूप में अंतर प्राप्त करें (यह सुनिश्चित करें कि दोनों दिनांक ऑब्जेक्ट स्थानीय या यूटीसी हैं):

long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

या

long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;

जब जावास्क्रिप्ट इस मान को प्राप्त करता है, तो एक नई तिथि ऑब्जेक्ट बनाएं। हालाँकि, यह दिनांक ऑब्जेक्ट स्थानीय समय माना जा रहा है, इसलिए आपको इसे वर्तमान समय क्षेत्र द्वारा ऑफसेट करने की आवश्यकता है:

var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))

console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)

जहां तक ​​मुझे पता है, यह किसी भी समय क्षेत्र के लिए काम करना चाहिए जहां आपको उन तिथियों को प्रदर्शित करने की आवश्यकता होती है जो टाइमज़ोन स्वतंत्र हैं।


3

यह विधि मेरे लिए काम कर रही है:

   public sCdateToJsDate(cSDate: any): Date {
        // cSDate is '2017-01-24T14:14:55.807'
        var datestr = cSDate.toString();
        var dateAr = datestr.split('-');
        var year = parseInt(dateAr[0]);
        var month = parseInt(dateAr[1])-1;
        var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T")));
        var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1);
        var timeAr = timestring.split(":");
        var hour = parseInt(timeAr[0]);
        var min = parseInt(timeAr[1]);
        var sek = parseInt(timeAr[2]);
        var date = new Date(year, month, day, hour, min, sek, 0);
        return date;
    }

1

यदि आप रेजर के साथ MVC का उपयोग करते हैं

----- उस्तरा / सी #

var dt1 = DateTime.Now.AddDays(14).Date;
    var dt2 = DateTime.Now.AddDays(18).Date;

    var lstDateTime = new List<DateTime>();
    lstDateTime.Add(dt1);
    lstDateTime.Add(dt2);

--- जावास्क्रिप्ट

$(function() {

            var arr = []; //javascript array

            @foreach (var item in lstDateTime)
             {
                @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day));
             }
  • 1: C # में लिस्ट बनाएं और उसे भरें
  • 2: जावास्क्रिप्ट में एक सरणी बनाएं
  • 3: सूची को पुनरावृत्त करने के लिए रेजर का उपयोग करें
  • 4: @ का उपयोग करें: वापस js और @ पर स्विच करने के लिए C # पर जाएँ
  • 5: js में महीने की संख्या को सही करने के लिए महीने में -1।

सौभाग्य


0
<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" />

दिनांक को जेएस दिनांक (सभी संख्याओं) में परिवर्तित करने के लिए:

var JSDate = $("#CDate").val();
JSDate = Date.parse(JSDate);

0

एक और देर से जवाब, लेकिन यह यहां गायब है। यदि आप /Date(1425408717000)/जावास्क्रिप्ट में क्रमबद्ध रूपांतरित करना चाहते हैं , तो आप बस कॉल कर सकते हैं:

var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));

स्रोत: अमीरसाहब


यह एक उत्तर है लेकिन, हाँ। मैं इसकी अनुशंसा नहीं करता। दो हैक्स एक अधिकार नहीं बनाते हैं। और माइक्रोसॉफ्ट का सीरियलाइजेशन एक अरुचिकर हैक है।
Suncat2000

@ Suncat2000 यह हैक कैसे है? यदि आप सर्वर से फ्रंट-एंड के लिए मान प्राप्त करने के लिए एक सेवा का उपयोग कर रहे हैं, तो मुझे कोई बेहतर विकल्प नहीं पता है। यह इस पृष्ठ पर समस्या का सबसे साफ समाधान है। यदि आप बेहतर विकल्प जानते हैं, तो हमें उदाहरण दिखाने के लिए परवाह है?
काजबो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.