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


336

मैं एक टाइमज़ोन को दूसरे में तारीख बदलने के लिए एक फ़ंक्शन की तलाश कर रहा हूं।

यह दो मापदंडों की जरूरत है,

  • दिनांक (प्रारूप में "2012/04/10 10:10:30 +0000")
  • टाइमज़ोन स्ट्रिंग ("एशिया / जकार्ता")

टाइमज़ोन स्ट्रिंग http://en.wikipedia.org/wiki/Zone.tab में वर्णित है

क्या इसे करने का कोई आसान तरीका है?


1
किसी दिए गए शहर के यूटीसी ऑफसेट का पता लगाएं। stackoverflow.com/questions/3002910/…
ब्रैंडन बून

3
मैं न केवल यूटीसी ऑफसेट बल्कि डेलाइट सेविंग / समर टाइम की गणना करना चाहता हूं। तो समय सही ढंग से वापस आ जाएगा।
रिज़्की रामाधन


इस एक के रूप में अच्छी तरह से stackoverflow.com/questions/16084313/…
अमोल एम कुलकर्णी

यूनिक्स दिनांक कमांड का उपयोग करके अपने समय क्षेत्र का सेट: दिनांक +% s -d '1 जनवरी 1970'
एंथनी

जवाबों:


191

var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
console.log('AEST time: '+ (new Date(aestTime)).toISOString())

var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
console.log('Asia time: '+ (new Date(asiaTime)).toISOString())

var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
console.log('USA time: '+ (new Date(usaTime)).toISOString())

var indiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
console.log('India time: '+ (new Date(indiaTime)).toISOString())

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
मैंने इसका उत्तर बदल दिया, क्योंकि यह किसी भी पुस्तकालय का उपयोग किए बिना सही और मानक विधि है।
रिज़्की रामाधन

5
एमडीएन प्रलेखन स्पष्ट रूप से कहता है कि सभी कार्यान्वयनों में मान्यता प्राप्त करने के लिए आवश्यक एकमात्र समयक्षेत्र यूटीसी है। ( stackoverflow.com/questions/10087819/… ) IE11 में [रन कोड स्निपेट] बटन पर क्लिक करने से एक त्रुटि उत्पन्न होती है।
विवियन नदी

1
यदि कोई भी कार्यान्वयन के लिए देख रहा है जो अभी सभी ब्राउज़र के लिए काम करता है, तो वे नीचे दिए गए किसी भी उत्तर को अपने स्वयं के विपक्ष के साथ आजमा सकते हैं ...
Rizky Ramadhan

14
यह उत्तर टाइम ज़ोन को सही तरीके से पास करने को दर्शाता है toLocaleString, लेकिन फिर यह बहुत ही गलत तरीके से उस स्ट्रिंग को Dateकंस्ट्रक्टर में वापस दिखाता है । वह मुसीबत पूछ रहा है। दिनांक स्ट्रिंग पार्सर को स्थानीय विशिष्ट स्वरूपों को स्वीकार करने की आवश्यकता नहीं है, और इनपुट को ऐसे माना जाएगा जैसे कि वह स्थानीय समय क्षेत्र में था। ऐसा मत करो। बस पहली toLocalStringकॉल से स्ट्रिंग आउटपुट का उपयोग करें।
मैट जॉनसन-पिंट

4
@MattJohnson तो आप getHour () या इस तरह के तरीकों का उपयोग नहीं कर सकते
अली Padida 21

131

के लिए moment.js उपयोगकर्ताओं, अब आप उपयोग कर सकते हैं पल-समय क्षेत्र । इसका उपयोग करने से, आपका कार्य कुछ इस तरह दिखाई देगा:

function toTimeZone(time, zone) {
    var format = 'YYYY/MM/DD HH:mm:ss ZZ';
    return moment(time, format).tz(zone).format(format);
}

3
मुझे यकीन नहीं था कि नए टाइमज़ोन को कैसे जोड़ा जाए, डॉक्स ने मेरी मदद नहीं की। मैं सिर्फ एक प्रोग्रामर हूँ, टाइम एक्सपर्ट नहीं!
पारिजिपाल

8
यहाँ समस्या यह है कि यह एक नया दिनांक ऑब्जेक्ट नहीं लौटाता है, यह एक स्ट्रिंग लौटाता है। यदि आप चाहते हैं कि यह अच्छा है, निश्चित रूप से।
निकन्न्क

2
क्या यह "वापसी का समय (समय) .tz (ज़ोन) .format (प्रारूप) नहीं है?" ? आपके द्वारा दिए गए कोड में मेरे पास "अमान्य दिनांक" त्रुटि है।
तारेक

1
ब्राउज़र में Moment.js लोड करना संभव नहीं है। बहुत दुखद :(
डेनियल श्वेलेव

4
यदि आप tz डेटाबेस की एक प्रति के साथ 180K ब्राउज़र को भेजने के बारे में खुश नहीं हैं और पुराने ब्राउज़रों पर वर्तमान समयक्षेत्र में गिरावट के साथ रह सकते हैं, तो @ lambinator के उत्तर का उपयोग करके देखें Date.prototype.toLocaleString
पीटर वी। मॉरच

92

बेशर्मी से चोरी: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-javascript/6016329

/** 
 * function to calculate local time
 * in a different city
 * given the city's UTC offset
 */
function calcTime(city, offset) {

    // create Date object for current location
    var d = new Date();

    // convert to msec
    // add local time zone offset
    // get UTC time in msec
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    // create new Date object for different city
    // using supplied offset
    var nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time in " + city + " is " + nd.toLocaleString();
}

यह फ़ंक्शन किसी शहर / देश का नाम और ऑफ़सेट मान प्रदान करके समय क्षेत्र मान की गणना करने के लिए उपयोगी है


4
अच्छा .... लेकिन मुझे लगता है कि वह चाहता है कि शहर में उत्तीर्ण होने के आधार पर उसके लिए ऑफसेट की तलाश की जाए।
ब्रैंडन बून

117
यह दिन के उजाले बचत परिवर्तनों को ध्यान में नहीं रखता है।
रोबोटबग्स

12
इस सवाल का जवाब नहीं है, लेकिन जवाब मेरा (+1)
शासन .85

उस '3600000' ने मुझे सचमुच मार डाला! इनपुट में, tz को घंटों में दिया जाना चाहिए! और, इसे घटाया जाना चाहिए। इसलिए, यदि आप पास हो जाते हैं: var d = new Date calcTime ('', d.getTimezoneOffset () / 60); इसे उसी समय वापस देना चाहिए।
प्रवीण

1
यह उत्तर गंभीर रूप से पुराना है और इसे हटा दिया जाना चाहिए, विशेष रूप से टोकोलेस्ट्रिंग का उपयोग करने वाला हिस्सा , जो संभवतः होस्ट टाइमज़ोन की रिपोर्ट करेगा जब इसे एक अलग टाइमज़ोन में स्थानांतरित कर दिया गया हो। मैन्युअल रूप से विभिन्न ऑफसेट के लिए टाइमस्टैम्प बनाने के बहुत बेहतर तरीके हैं।
रॉबग

89

सफारी को छोड़कर अधिकांश डेस्कटॉप (मोबाइल नहीं) ब्राउज़र तर्कों के साथ टोलेस्ट्रीमिंग फ़ंक्शन का समर्थन करते हैं , पुराने ब्राउज़र आमतौर पर तर्कों को अनदेखा करते हैं।

new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' })

4
फ़ायरफ़ॉक्स और एज में विफल :(
Julime Vidas

10
क्योंकि यह FF और IE11 + में कठिन विफल रहता है, एक और समाधान खोजने की आवश्यकता है।
jdavid.net

2
एज और क्रोम इसे पसंद करते हैं :)
सुहैल मुमताज़ अवन

6
यह अभी क्रोम v59 और फ़ायरफ़ॉक्स डेस्कटॉप v54 और Android v59 पर चोम और iOS 10.3 पर सफारी 10 पर काम किया। यह IE10 पर काम नहीं किया। MDN का Date.prototyp.toLocaleString () वर्णन में एक toLocaleStringSupportsLocales()कार्यान्वयन है जो आपको समर्थन के लिए विश्वसनीय रूप से जांचने की अनुमति देता है।
पीटर वी। मॉर्क

1
नोड.जेएस v8.7.0 में सफलतापूर्वक परीक्षण किया गया
हेनरिक

56

ठीक है, मिल गया!

मैं टाइमजोन-जेएस का उपयोग कर रहा हूं । यह कोड है:

var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");

console.debug(dt); //return formatted date-time in asia/jakarta

90
मुझे इसके खिलाफ मतदान करना है, टाइमज़ोन-जेएस डीएसटी का समर्थन नहीं करता है और यह इसके रीडमी में विज्ञापन नहीं करता है, जो इसे ढूंढ रहे लोगों के लिए एक बुरी टिप बनाता है। देखें: github.com/mde/timezone-js/issues/51 और कई अन्य मुद्दे जो दायर किए गए हैं और जो तय नहीं लगते हैं।

@ हाँ हाँ, लेकिन वहाँ वास्तव में ग्राहक पक्ष timezone / दिनांक प्रबंधन के लिए एक समाधान नहीं है ... jquery ui datepicker मुझे इस वजह से पागल बना रहा है। चीयर्स
लुकास

2
@Marabunta, क्षण-समय-क्षेत्र की तरह दिखता है (ब्रायन डी पाल्मा द्वारा उत्तर) DST github.com/moment/moment-timezone/issues/21
welldan97

2
TimezoneJS का उपयोग न करें, यह डीएसटी परिवर्तनों के आसपास खराब हो गया है।
मैट

17

यदि आप कुछ बड़ी लाइब्रेरी को आयात नहीं करना चाहते हैं तो आप डेट ऑब्जेक्ट्स को अलग-अलग टाइमज़ोन में बदलने के लिए Intl.DateTimeFormat का उपयोग कर सकते हैं ।

// Specifying timeZone is what causes the conversion, the rest is just formatting
const options = {
  year: '2-digit', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  timeZone: 'Asia/Jakarta',
  timeZoneName: 'short'
}
const formater = new Intl.DateTimeFormat('sv-SE', options)
const startingDate = new Date("2012/04/10 10:10:30 +0000")

const dateInNewTimezone = formater.format(startingDate) 
console.log(dateInNewTimezone) // 12-04-10 17:10:30 GMT+7

ऑफसेट, दिन के उजाले की बचत और अतीत में होने वाले बदलावों का आपके लिए ध्यान रखा जाएगा।


IE10 + समय क्षेत्र के लिए Intl API का समर्थन नहीं करता है। क्षण.गिथुब.इयो
क्लो

यह वास्तव में सबसे अच्छा जवाब है। toLocaleStringअसंगत कार्यान्वयन है, और यह IE11 से आगे काम करता है।
dlsso

FYI करें: यह वास्तव में IE11 में काम नहीं करता है, कम से कम विंडोज 8.1 पर। जब आप formatterऑब्जेक्ट बनाने का प्रयास करते हैं , तो आपको मिलता है: `` ऑप्शन वैल्यू 'एशिया / जकार्ता' के लिए 'टाइमज़ोन' वैध सीमा से बाहर है। अपेक्षित: [
ected

क्या फॉर्मेट से अंतिम परिणाम को डेट ऑब्जेक्ट में फिर से बदलने का कोई तरीका है?
mding5692

10

समझ गया !

दिखाया गया दिनांक = सर्वर दिनांक, कोई मैटर स्थानीय सेटिंग्स (UTC) को लागू करना चाहता था।

मेरा सर्वर GMT-6 -> नई तिथि () है। getTimezoneOffset () = 360

myTZO = 360;
myNewDate=new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO)));
alert(myNewDate);

2
यद्यपि यह सही भोले समय को दर्शाता है, myOldDateObj से टाइमजोन जानकारी रखी गई है। तो वास्तव में यह गलत समय है (जब आप समय में एक उदाहरण के रूप में समय लेते हैं और एक घड़ी पर समय नहीं)।
गब्ने g

@ gabn88: आप जावास्क्रिप्ट का उपयोग करके सर्वर का समय नहीं बदल पाएंगे ... सर्वर समय को ठीक करने के लिए, इसे ऑपरेटिंग सिस्टम स्तर पर करें।
सेड्रिक साइमन

2
मुझे सर्वर समय तय करने की आवश्यकता नहीं है;) सर्वर समय हमेशा मेरे लिए यूटीसी होता है। लेकिन मेरे पास अलग-अलग टाइमज़ोन में अलग संगठन है। और उनके उपकरणों को हमेशा यह दिखाना चाहिए कि उनका संगठन जहां भी, जहां भी वे तैनात हैं।
गबन g

हम हमेशा एक्स टाइमज़ोन की तारीखों को दिखाने की इसी तरह की समस्या रखते हैं। हम सर्वर से स्ट्रिंग प्रारूप में सभी तिथियों को भेजने की कोशिश करते हैं और ब्राउज़र में हम उन्हें स्थानीय समयक्षेत्र तिथियों के रूप में मानते हैं।
वेंकटेश्वर राव

5

टाइमज़ोन सेट करने के लिए आप toLocaleString () विधि का उपयोग कर सकते हैं।

new Date().toLocaleString('en-US', { timeZone: 'Indian/Christmas' })

भारत के लिए आप "भारतीय / क्रिसमस" का उपयोग कर सकते हैं और निम्नलिखित विभिन्न समय-क्षेत्र हैं,

"Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"

आप टाइमज़ोन सेट नहीं कर रहे हैं, बल्कि उस टाइमज़ोन में व्यक्त समय के साथ एक स्ट्रिंग का उत्पादन कर रहे हैं। तारीख वही रहती है।
गेरार्ड ओनली


4

यदि आपको केवल टाइमज़ोन बदलने की आवश्यकता है, तो मैंने केवल नंगे न्यूनतम समारोह के साथ क्षण-समय-क्षेत्र का एक छीन-छीन संस्करण अपलोड किया है । इसका ~ 1KB + डेटा:

S.loadData({
    "zones": [
        "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
        "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
    ],
    "links": [
        "Europe/Paris|Europe/Madrid",
    ]
});

let d = new Date();
console.log(S.tz(d, "Europe/Madrid").toLocaleString());
console.log(S.tz(d, "Australia/Sydney").toLocaleString());

2

वर्ष, महीने और दिन के साथ एक चर सेट करें - 'प्रतीकों', 'प्लस' और HH में समय: mm: ss पैटर्न, इसके बाद +01: 00 स्ट्रिंग के अंत में (मेरे मामले में) समय क्षेत्र +1 है)। फिर दिनांक निर्माणकर्ता के तर्क के रूप में इस स्ट्रिंग का उपयोग करें।

//desired format: 2001-02-04T08:16:32+01:00
dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00";

var date = new Date(dateAndTime );

2

मुझे ध्यान देना चाहिए कि मैं उन बाहरी पुस्तकालयों के संबंध में प्रतिबंधित हूं जिनका मैं उपयोग कर सकता हूं। पल.जेएस और टाइमज़ोन-जेएस मेरे लिए कोई विकल्प नहीं थे।

Js दिनांक वस्तु जो मेरे पास है वह UTC में है। मुझे इस तिथि से एक विशिष्ट समयक्षेत्र (मेरे मामले में 'अमेरिका / शिकागो') तारीख और समय प्राप्त करने की आवश्यकता थी।

 var currentUtcTime = new Date(); // This is in UTC

 // Converts the UTC time to a locale specific format, including adjusting for timezone.
 var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));

 console.log('currentUtcTime: ' + currentUtcTime.toLocaleDateString());
 console.log('currentUtcTime Hour: ' + currentUtcTime.getHours());
 console.log('currentUtcTime Minute: ' + currentUtcTime.getMinutes());
 console.log('currentDateTimeCentralTimeZone: ' +        currentDateTimeCentralTimeZone.toLocaleDateString());
 console.log('currentDateTimeCentralTimeZone Hour: ' + currentDateTimeCentralTimeZone.getHours());
 console.log('currentDateTimeCentralTimeZone Minute: ' + currentDateTimeCentralTimeZone.getMinutes());

UTC वर्तमान में 'अमेरिका / शिकागो' से 6 घंटे आगे है। आउटपुट है:

currentUtcTime: 11/25/2016
currentUtcTime Hour: 16
currentUtcTime Minute: 15

currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15

11
new Date();स्थानीय समयक्षेत्र वापस करें, UTC नहीं
मिर्को

1
डॉक्स से:If no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
मिर्को

हम्म। कंडा भ्रामक। यह किसी तिथि पर समयक्षेत्र को परिवर्तित नहीं करता है; बल्कि यह बदले हुए घंटों के साथ एक नई तारीख बनाता है। यह बहुत स्पष्ट हो जाएगा कि आप जो स्ट्रिंग टोलकोस्ट्रीमिंग कॉल से बनाए गए स्ट्रिंग से चाहते हैं उन्हें निकालने के लिए एक नियमित अभिव्यक्ति का उपयोग करें।
गेरार्ड ओनली

2

यहाँ मेरा कोड है, यह पूरी तरह से काम कर रहा है, आप डेमो के साथ देने की कोशिश कर सकते हैं:

$(document).ready(function() {
   //EST
setInterval( function() {
var estTime = new Date();
 var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
var seconds = currentDateTimeCentralTimeZone.getSeconds();
var minutes = currentDateTimeCentralTimeZone.getMinutes();
var hours =  currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
 var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";

if (hours < 10){
     hours = "0" + hours;
}

if (minutes < 10){
     minutes = "0" + minutes;
}
if (seconds < 10){
     seconds = "0" + seconds;
}
    var mid='PM';
    if(hours==0){ //At 00 hours we need to show 12 am
    hours=12;
    }
    else if(hours>12)
    {
    hours=hours%12;
    mid='AM';
    }
    var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
// Add a leading zero to seconds value
$("#sec").html(x3);
},1000);


});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p class="date_time"><strong id="sec"></strong></p>
</body>
</html>


StackOverflow में आपका स्वागत है! क्या आप अधिक जानकारी प्रदान कर सकते हैं जैसे कि यह कोड कैसे काम करता है और यह क्या करता है? यह समस्या को कैसे ठीक करता है?
DarkSuniuM

ऊपर दिया गया मेरा कोड आपके टाइमज़ोन को दूसरे देशों के टाइमज़ोन पर अपडेट करना है।
साहिल कपूर

आपको HTML को अपनी HTML फ़ाइल में रखना होगा और ऊपर दिए गए jquery कोड को पाद लेख में रखना होगा। यह आपके लिए ('en-US', {timeZone: 'America / Chicago'}) के अनुसार काम करेगा। आपको इन दो मूल्यों को अपडेट करने की आवश्यकता है, यदि आप अन्य देशों को टाइमज़ोन चाहते हैं
साहिल कपूर

इंतज़ार नही। मैंने ध्यान से देखे बिना ही इसे उकेरा। आप 1 को क्यों जोड़ रहे हैं currentDateTimeCentralTimeZone.getHours()? इसके बिना यह काम करेगा और यह2727 के उत्तर stackoverflow.com/a/40809160/1404185 के समान है
chetstone

1

आप इसे भारत में परिवर्तित होने की समय-सीमा के लिए भी आज़मा सकते हैं:

var indianTimeZoneVal = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'});
var indainDateObj = new Date(indianTimeZoneVal);
indainDateObj.setHours(indainDateObj.getHours() + 5);
indainDateObj.setMinutes(indainDateObj.getMinutes() + 30);
console.log(indainDateObj);

1
दूसरे चरण के बाद ही मुझे भारत में समय मिलता है ... तो आप अभी भी इसमें 5 & 1 / 2hrs क्यों जोड़ रहे हैं?
user3833732

उस विधि का उपयोग करते समय मैं नॉर्वे में यहां मिलता हूं जब मैं क्रोम के साथ लॉग इन करता हूं: ओरिजिनल: थू सितंबर 27 2018 15:53:46 जीएमटी + 0200 (संतराप्रोपिस्क सोमेरटिड)। संशोधित: Thu 27 सितंबर 2018 19:23:46 GMT + 0200 (संतराप्रोपिस सोममेर्टिड)। "सेंड्रालेरोपाइक सोममेर्टिड" का अर्थ है सेंट्रल यूरोपियन समर टाइम। यकीन नहीं होता है कि जब आप भारत के लिए गर्मी के समय की जरूरत है, या इसके विपरीत काम करेंगे जब आप भारत में होंगे और यूरोप के लिए गर्मियों के समय की जरूरत होगी, और इसी तरह।
केबमन

सेटहॉर्स () का उपयोग करना इस तरह से दिन, महीने, वर्ष के संक्रमण के लिए जिम्मेदार नहीं है, उदाहरण के लिए 8 वीं पर न्यू डेल में 3:30 बजे लंदन में 7 वें पर 11 बजे है। फिर महीने, वर्ष और लीप दिनों के अंत पर विचार करें। क्या दिनांक है कि गणित करें <प्री> स्थानीय_टाइम = नई तिथि (zulu_time.getTime () + 3600000 * std_timezone.timezone_factor - 60 * 60 * 1000); let_str = local_time.toISOString ()। टुकड़ा (0, 10); let time_str = local_time.toISOString ()। टुकड़ा (11, -1); let timezone_str = std_timezone.timezone_str; </ pre>
लिंकन रान्डल मैकफारलैंड

1

पल भर में इस पृष्ठ से लिंक सहित बहुत कुछ देखने के बाद, मुझे यह बेहतरीन लेख मिला, पल-पल का उपयोग करते हुए:

https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/

इसे संक्षेप में प्रस्तुत करने के लिए:

उपयोगकर्ता का टाइमज़ोन प्राप्त करें

var tz = moment.tz.guess();
console.info('Timezone: ' + tz);

रिटर्न उदाहरण: टाइमज़ोन: यूरोप / लंदन

डिफ़ॉल्ट उपयोगकर्ता टाइमज़ोन सेट करें

moment.tz.setDefault(tz);

कस्टम टाइमज़ोन सेट करें

moment.tz.setDefault('America/Los_Angeles');

UTC में दिनांक / समय को स्थानीय समय में परिवर्तित करें, मानता है कि मूल तिथि / समय UTC में है

moment.utc('2016-12-25 07:00').tz(tz).format('ddd, Do MMMM YYYY, h:mma');

रिटर्न: सूर्य, 25 दिसंबर 2016, सुबह 7:00 बजे

परिवर्तित दिनांक / समय को LA समय

moment.utc('2016-12-25 07:00').tz('America/Los_Angeles').format('ddd, Do MMMM YYYY, h:mma');

रिटर्न: शनि, 24 दिसंबर 2016, रात 11:00 बजे

LA समय से लंदन में परिवर्तित करें

moment.tz('2016-12-25 07:00', 'America/Los_Angeles').tz('Europe/London').format( 'ddd, Do MMMM YYYY, h:mma' );

रिटर्न: सूर्य, 25 दिसंबर 2016, दोपहर 3:00 बजे


1

आप https://www.npmjs.com/package/ctoc_timezone का भी उपयोग कर सकते हैं

इसे बहुत सरल कार्यान्वयन और प्रारूप अनुकूलन मिला है।

समय-समय पर प्रारूप बदलना:

CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");

आउटपुट:

28th Feb 2013 19:00:00 EST

आप दस्तावेज़ में कई कार्यक्षमताओं का पता लगा सकते हैं।


0

एक npm मॉड्यूल है जिसे 'timezones.json' कहा जाता है, आप इसके लिए उपयोग कर सकते हैं; यह मूल रूप से डेलाइट सेविंग और ऑफ़सेट के बारे में जानकारी रखने वाली वस्तुओं के साथ एक जोंस फाइल के साथ होता है, ....

एशिया / जकार्ता के लिए यह इस वस्तु को वापस करने में सक्षम होगा:

{
  "value": "SE Asia Standard Time",
  "abbr": "SAST",
  "offset": 7,
  "isdst": false,
  "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
  "utc": [
    "Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"
  ]
}

आप इसे यहां देख सकते हैं:

https://github.com/dmfilipenko/timezones.json

https://www.npmjs.com/package/timezones.json

आशा है कि यह उपयोगी है


0

जावा 8 java.timeपैकेज से परिचित लोग , या joda-timeशायद ब्लॉक पर नए बच्चे को प्यार करेंगे: जेएस-जोडा लाइब्रेरी।

इंस्टॉल

npm install js-joda js-joda-timezone --save

उदाहरण

<script src="node_modules/js-joda/dist/js-joda.js"></script>
<script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script>
<script>
var dateStr = '2012/04/10 10:10:30 +0000';
JSJoda.use(JSJodaTimezone);
var j = JSJoda;
// https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern
var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss xx'));
var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of('America/New_York'));
console.log(zonedDateTime.toString(), '=>', adjustedZonedDateTime.toString());
// 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York]
</script>

असली जावा प्रकृति में, यह बहुत क्रिया योग्य है। लेकिन, एक पोर्टेड जावा लाइब्रेरी होने के नाते, विशेष रूप से यह देखते हुए कि उन्होंने 1800'ish परीक्षण मामलों को पोर्ट किया है, यह भी शायद शानदार रूप से सटीक रूप से काम करता है।

क्रोनो हेरफेर कठिन है। यही कारण है कि कई अन्य पुस्तकालय किनारे के मामलों में छोटी गाड़ी हैं। Moment.js को टाइमज़ोन सही लगता है, लेकिन अन्य js lib मैंने देखे हैं, जिनमें शामिल हैं timezone-js, भरोसेमंद नहीं लगते हैं।


0

मैंने हाल ही में टाइपस्क्रिप्ट में यह किया है:

// fromTimezone example : Europe/Paris, toTimezone example: Europe/London
private calcTime( fromTimezone: string, toTimezone: string, dateFromTimezone: Date ): Date {
  const dateToGetOffset = new Date( 2018, 5, 1, 12 );

  const fromTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: fromTimezone, hour12: false } );
  const toTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: toTimezone, hour12: false } );

  const fromTimeHours: number = parseInt( fromTimeString.substr( 0, 2 ), 10 );
  const toTimeHours: number = parseInt( toTimeString.substr( 0, 2 ), 10 );

  const offset: number = fromTimeHours - toTimeHours;

  // convert to msec
  // add local time zone offset
  // get UTC time in msec
  const dateFromTimezoneUTC = Date.UTC( dateFromTimezone.getUTCFullYear(),
    dateFromTimezone.getUTCMonth(),
    dateFromTimezone.getUTCDate(),
    dateFromTimezone.getUTCHours(),
    dateFromTimezone.getUTCMinutes(),
    dateFromTimezone.getUTCSeconds(),
  );

  // create new Date object for different city
  // using supplied offset
  const dateUTC = new Date( dateFromTimezoneUTC + ( 3600000 * offset ) );

  // return time as a string
  return dateUTC;
}

मैं "एन-यूके" प्रारूप का उपयोग करता हूं क्योंकि यह एक सरल है। "एन-यूएस" या जो भी काम करता हो सकता था।

यदि पहला तर्क आपका लोकल टाइमज़ोन है और दूसरा आपका टारगेट टाइमज़ोन है तो यह सही ऑफ़सेट के साथ डेट ऑब्जेक्ट लौटाता है।


0

मुझे मोमेंटम टाइमज़ोन का उपयोग करने में परेशानी हो रही थी । मैं इस जवाब को सिर्फ इसलिए जोड़ रहा हूं कि अगर किसी और को भी इसी मुद्दे का सामना करना पड़े। इसलिए मेरे पास डेट स्ट्रिंग 2018-06-14 13:51:00आ रही है API। मुझे पता है कि यह संग्रहीत है UTCलेकिन स्ट्रिंग खुद के लिए नहीं बोलती है।

मैं समय-समय पर यह बताने देता हूं कि इस तिथि को क्या करने से यह हो सकता है:

let uTCDatetime = momentTz.tz("2018-06-14 13:51:00", "UTC").format();
// If your datetime is from any other timezone then add that instead of "UTC"
// this actually makes the date as : 2018-06-14T13:51:00Z

अब मैं इसे विशिष्ट समय-क्षेत्र में परिवर्तित करना चाहूंगा:

let dateInMyTimeZone = momentTz.tz(uTCDatetime, "Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss");
// now this results into: 2018-06-14 19:21:00, which is the corresponding date in my timezone.

0

बस अपनी इच्छा देश टाइमज़ोन सेट करें और आप HTML में आसानी से दिखा सकते हैं कि यह हर एक मिनट के बाद सेटइंटरवल () फ़ंक्शन का उपयोग करके अपडेट हो सकता है। function formatAMPM () 12 घंटे के प्रारूप और AM / PM समय प्रदर्शन का प्रबंधन करते हैं।

$(document).ready(function(){
        var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
        pakTime = new Date(pakTime);

        var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
        libyaTime = new Date(libyaTime);



         document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
         document.getElementById("ly").innerHTML = "LY   " +formatAMPM(libyaTime);

        setInterval(function(today) {
            var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
            pakTime = new Date(pakTime);

            var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
            libyaTime = new Date(libyaTime);


           document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
           document.getElementById("ly").innerHTML = "LY  " +formatAMPM(libyaTime);

        },10000);

         function formatAMPM(date) {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var ampm = hours >= 12 ? 'pm' : 'am';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0'+minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;
            return strTime;
        }


    });

-1

मैं किसी भी समय क्षेत्र में दिनांक ऑब्जेक्ट को परिवर्तित करने के लिए एक आसान विधि नहीं जानता, लेकिन यदि आप इसे स्थानीय समय क्षेत्र में परिवर्तित करना चाहते हैं, तो आप इसे Date.prototype.getTime()मिलीसेकंड की संबंधित संख्या के साथ परिवर्तित कर सकते हैं , और फिर से वापस कर सकते हैं।

date = new Date('2016-05-24T13:07:20');
date = new Date(date.getTime());

उदाहरण के लिए, date.getHours()अब अगर आप मेरी तरह, ऑस्ट्रिया में (और यह गर्मी है) के 15बजाय वापस आ जाएंगे 13

मैंने पढ़ा है कि विभिन्न डेटाटाइम फ़ंक्शन कुछ ब्राउज़रों में गैर-मानक व्यवहार प्रदर्शित कर सकते हैं, इसलिए पहले इसका परीक्षण करें। मैं पुष्टि कर सकता हूं कि यह क्रोम में काम करता है।


1
यह मतदान क्यों किया गया? यह अब तक का सबसे आसान और सबसे अच्छा तरीका है। ऊपर दिए गए अधिकांश उत्तर गर्मियों / सर्दियों के समय को ध्यान में नहीं रखते हैं
मोर्टेनसेल

दूसरी पंक्ति का क्या मतलब है? दिनांक निर्माणकर्ता आपके स्थानीय समय क्षेत्र को पहले ही मान लेता है। ये दोनों लाइनें स्थानीय ब्राउज़र टाइम ज़ोन में एक तारीख देती हैं, और इस सवाल का जवाब नहीं देती हैं कि डेलाइट सेविंग टाइम के साथ दूसरे ज़ोन में कैसे कन्वर्ट किया जाए।
क्लो

-1

अपने वर्तमान समयक्षेत्र के लिए टाइम ज़ोन ऑफ़सेट

date +%s -d '1 Jan 1970'

मेरे GMT + 10 समयक्षेत्र (ऑस्ट्रेलिया) के लिए यह -36000 लौटा


-6

त्वरित और गंदे मैनुअल घंटे परिवर्तक और वापसी:

return new Date(new Date().setHours(new Date().getHours()+3)).getHours()

बहुत गंदा (और बहुत गन्दा)
मैक्सवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.