ما هي أفضل طريقة لتهيئة تاريخ JavaScript إلى منتصف الليل؟
ما هي أبسط طريقة للحصول على نسخة من new Date() ولكن تعيين الوقت عند منتصف الليل؟
الإجابة رقم 1
يمكن لطريقة setHours أن تأخذ وسائط اختيارية مثل minutes وseconds وms، على سبيل المثال:
var d = new Date();
d.setHours(0,0,0,0);
هذا سيحدد الوقت إلى 00:00:00.000 في منطقتك الزمنية الحالية، إذا كنت تريد العمل بتوقيت UTC، يمكنك استخدام طريقة setUTCHours.
الإجابة رقم 2
أردت فقط توضيح أن المقتطف من الإجابة المقبولة يعطي أقرب منتصف ليلة في الماضي:
var d = new Date();
d.setHours(0,0,0,0); // last midnight
إذا كنت تريد الحصول على أقرب منتصف ليل في المستقبل، استخدم الكود التالي:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
الإجابة رقم 3
سطر واحد لإعدادات الكائن:
new Date(new Date().setHours(0,0,0,0));
عند إنشاء عنصر:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
الإجابة رقم 4
يمكنك على الأرجح استخدام
new Date().setUTCHours(0,0,0,0)
إذا كنت تحتاج القيمة مرة واحدة فقط.
الإجابة رقم 5
سأضيف هذا هنا لأنني وصلت إلى هذه الصفحة أثناء البحث عن كيفية القيام بذلك في moment.js وقد يفعل الآخرون الشيء نفسه أيضاً.
[السبب: كلمة "moment" تظهر بالفعل في مكان آخر على هذه الصفحة لذا تقوم محركات البحث بتوجيه المستخدمين هنا، و moment.js منتشر بما فيه الكفاية ليكون من المهم تغطيته بالنظر إلى عدد المرات التي يُذكر فيها في أسئلة SO الأخرى المتعلقة بالتواريخ]
لذلك، في الإصدار 2.0.0 وما فوق:
date.startOf('day');
للإصدارات السابقة:
date.sod();
المستندات :
http://momentjs.com/docs/#/manipulating/start-of/
الإجابة رقم 6
إذا تم الحساب بالتواريخ، فإن التوقيت الصيفي سيؤدي غالبًا إلى زيادة ساعة واحدة أو نقصان ساعة واحدة عن منتصف الليل (CEST). وهذا يتسبب في اختلاف يوم واحد عند إعادة التواريخ. لذلك يجب تقريب التواريخ إلى أقرب منتصف ليل. لذلك سيكون الكود كما يلي (شكرًا لـ jamisOn):
var d = new Date();
if(d.getHours() < 12) {
d.setHours(0,0,0,0); // previous midnight day
} else {
d.setHours(24,0,0,0); // next midnight day
}
